{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'/home/huang/sympy_work_code'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%pwd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# %load \"../environment.py\"\n",
    "# You must import sympy.abc first then import sympy\n",
    "# or it will have some bugs when it run solvers for \n",
    "# trigeometric functions.\n",
    "from sympy.abc import x,y,z,r,m,n,l,q,k,t,p\n",
    "from sympy import *\n",
    "from sympy.calculus.util import *\n",
    "from sympy.stats import *\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "from sys import path,platform\n",
    "match platform:\n",
    "    case \"linux\":\n",
    "        path.append(\"/home/huang/Documents/packaging_tutorial/src\")\n",
    "    case \"darwin\":\n",
    "        path.append(\"/Users/huangzhiming/Documents/python学习/packaging_tutorial/src\")\n",
    "%load_ext autoreload \n",
    "%autoreload 1\n",
    "\n",
    "%aimport basic_package.utils\n",
    "%aimport function_calculator_package.extreme_points\n",
    "%aimport function_calculator_package.utils\n",
    "%aimport quadratic_function.utils\n",
    "%aimport quadratic_function.hyperbola\n",
    "%aimport quadratic_function.utils\n",
    "\n",
    "from basic_package.utils import *\n",
    "from function_calculator_package.extreme_points import *\n",
    "from function_calculator_package.utils import *\n",
    "from quadratic_function.quadraticfunction import QuadraticFunction\n",
    "from quadratic_function.hyperbola import Hyperbola\n",
    "from quadratic_function.utils import line_and_quadratic\n",
    "\n",
    "%aimport excel_function_package.chi_square_test\n",
    "from excel_function_package.chi_square_test import ChiSquaredTest,chi_squared_of_error_probability\n",
    "%aimport excel_function_package.data\n",
    "\n",
    "from excel_function_package.data import Data\n",
    "\n",
    "%aimport solver.utils\n",
    "from solver.utils import solve_univariate_inequalities\n",
    "\n",
    "%aimport function_calculator_package.utils \n",
    "from function_calculator_package.utils import function_is_odd,function_is_even\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "%aimport geometry3D.frustum\n",
    "%aimport geometry3D.prism\n",
    "%aimport geometry3D.pyramid\n",
    "%aimport geometry3D.frustum_cone\n",
    "%aimport geometry3D.sphere\n",
    "\n",
    "from geometry3D.frustum import Frustum\n",
    "from geometry3D.prism import Prism,Cube\n",
    "from geometry3D.pyramid import Pyramid,Cone,Tetrahedron\n",
    "from geometry3D.frustum_cone import FrustumCone\n",
    "from geometry3D.sphere import Sphere\n",
    "a,b,c=symbols(\"a,b,c\",real=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "%aimport geometry3D.prism\n",
    "from geometry3D.prism import Cylinder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "%aimport geometry3D.polygon3D\n",
    "\n",
    "from geometry3D.polygon3D import Polygon3D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "m=Matrix([[26,24],[70,30]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}26 & 24\\\\70 & 30\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[26, 24],\n",
       "[70, 30]])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 339,
   "metadata": {},
   "outputs": [],
   "source": [
    "chi=ChiSquaredTest(m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 340,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{75}{16}$"
      ],
      "text/plain": [
       "75/16"
      ]
     },
     "execution_count": 340,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chi.chi_squared_value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 341,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4.6875$"
      ],
      "text/plain": [
       "4.68750000000000"
      ]
     },
     "execution_count": 341,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 344,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3.84145882069412$"
      ],
      "text/plain": [
       "3.84145882069412"
      ]
     },
     "execution_count": 344,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chi_squared_of_error_probability(0.05)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 345,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 6.63489660102121$"
      ],
      "text/plain": [
       "6.63489660102121"
      ]
     },
     "execution_count": 345,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chi_squared_of_error_probability(0.01)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 351,
   "metadata": {},
   "outputs": [],
   "source": [
    "p,q=symbols(\"p,q\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 352,
   "metadata": {},
   "outputs": [],
   "source": [
    "X=Binomial(\"X\",3,p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 353,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y=Binomial(\"Y\",3,q)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 349,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.stats import P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 354,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle q^{3} \\left(p^{3} + 3 p^{2} \\cdot \\left(1 - p\\right) + 3 p \\left(1 - p\\right)^{2}\\right)$"
      ],
      "text/plain": [
       "q**3*(p**3 + 3*p**2*(1 - p) + 3*p*(1 - p)**2)"
      ]
     },
     "execution_count": 354,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(X>0)*P(Eq(Y,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 355,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle p q^{3} \\left(p^{2} - 3 p + 3\\right)$"
      ],
      "text/plain": [
       "p*q**3*(p**2 - 3*p + 3)"
      ]
     },
     "execution_count": 355,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 356,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{p^{2} - 3 p + 3}{p^{2}}$"
      ],
      "text/plain": [
       "(p**2 - 3*p + 3)/p**2"
      ]
     },
     "execution_count": 356,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_/(p*q)**3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 357,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1 - \\frac{3}{p} + \\frac{3}{p^{2}}$"
      ],
      "text/plain": [
       "1 - 3/p + 3/p**2"
      ]
     },
     "execution_count": 357,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 358,
   "metadata": {},
   "outputs": [],
   "source": [
    "X1=Bernoulli(\"X1\",P(X>0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 359,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y1=Bernoulli(\"Y1\",P(Y>0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 360,
   "metadata": {},
   "outputs": [],
   "source": [
    "Z=5*X1*Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 362,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.stats import E"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 363,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(p^{3} + 3 p^{2} \\cdot \\left(1 - p\\right) + 3 p \\left(1 - p\\right)^{2}\\right) \\left(15 q^{3} + 30 q^{2} \\cdot \\left(1 - q\\right) + 15 q \\left(1 - q\\right)^{2}\\right)$"
      ],
      "text/plain": [
       "(p**3 + 3*p**2*(1 - p) + 3*p*(1 - p)**2)*(15*q**3 + 30*q**2*(1 - q) + 15*q*(1 - q)**2)"
      ]
     },
     "execution_count": 363,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E(Z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 364,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 15 p q \\left(p^{2} - 3 p + 3\\right)$"
      ],
      "text/plain": [
       "15*p*q*(p**2 - 3*p + 3)"
      ]
     },
     "execution_count": 364,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 新高考一卷"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=FiniteSet(*range(-1,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{-1, 0, 1, 2, 3, 4\\right\\}$"
      ],
      "text/plain": [
       "{-1, 0, 1, 2, 3, 4}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "B=ImageSet(Lambda(n,2*n+1),A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{2 n + 1\\; \\middle|\\; n \\in \\left\\{-1, 0, 1, 2, 3, 4\\right\\}\\right\\}$"
      ],
      "text/plain": [
       "ImageSet(Lambda(n, 2*n + 1), {-1, 0, 1, 2, 3, 4})"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{-1, 1, 3\\right\\}$"
      ],
      "text/plain": [
       "{-1, 1, 3}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A&B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1. B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "x=symbols(\"x\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "z1=x*I"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle i x$"
      ],
      "text/plain": [
       "I*x"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "z2=z1+1/z1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle i x - \\frac{i}{x}$"
      ],
      "text/plain": [
       "I*x - I/x"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle i x - \\frac{i}{x}$"
      ],
      "text/plain": [
       "I*x - I/x"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nsimplify(z2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{i \\left(x - 1\\right) \\left(x + 1\\right)}{x}$"
      ],
      "text/plain": [
       "I*(x - 1)*(x + 1)/x"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(z2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=Abs(z2-z1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{\\left|{x}\\right|}$"
      ],
      "text/plain": [
       "1/Abs(x)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2. A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "a,b,c=symbols(\"a,b,c\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=a+2*b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + 2 b$"
      ],
      "text/plain": [
       "a + 2*b"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a^{2} + 4 a b + 4 b^{2}$"
      ],
      "text/plain": [
       "a**2 + 4*a*b + 4*b**2"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(c**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 a b + 5$"
      ],
      "text/plain": [
       "4*a*b + 5"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.subs({a**2:1,b**2:1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- \\frac{1}{2}\\right\\}$"
      ],
      "text/plain": [
       "{-1/2}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_-3,a*b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{\\left(a + b\\right)^{2}}$"
      ],
      "text/plain": [
       "sqrt((a + b)**2)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sqrt((c-b)**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{a^{2} + 2 a b + b^{2}}$"
      ],
      "text/plain": [
       "sqrt(a**2 + 2*a*b + b**2)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1$"
      ],
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.subs({a**2:1,b**2:1,a*b:-1/S(2)})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 3. B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "an=sequence(a*q**(n-1),(n,1,11))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[a, a q, a q^{2}, a q^{3}, \\ldots\\right]$"
      ],
      "text/plain": [
       "SeqFormula(a*q**(n - 1), (n, 1, 11))"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "an"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 11$"
      ],
      "text/plain": [
       "11"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "an.length"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a$"
      ],
      "text/plain": [
       "a"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "an[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=Eq(an[0]+an[1],12)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a q + a = 12$"
      ],
      "text/plain": [
       "Eq(a*q + a, 12)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=Eq(an[0]+an[2],2*(an[1]+6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a q^{2} + a = 2 a q + 12$"
      ],
      "text/plain": [
       "Eq(a*q**2 + a, 2*a*q + 12)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=nonlinsolve([eq1,eq2],[a,q])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( 3, \\  3\\right), \\left( 12, \\  0\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(3, 3), (12, 0)}"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "answer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "a1,a2=answer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 3, \\  3\\right)$"
      ],
      "text/plain": [
       "(3, 3)"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 12, \\  0\\right)$"
      ],
      "text/plain": [
       "(12, 0)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=sum(an[:10])/sum(an[:5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{a q^{9} + a q^{8} + a q^{7} + a q^{6} + a q^{5} + a q^{4} + a q^{3} + a q^{2} + a q + a}{a q^{4} + a q^{3} + a q^{2} + a q + a}$"
      ],
      "text/plain": [
       "(a*q**9 + a*q**8 + a*q**7 + a*q**6 + a*q**5 + a*q**4 + a*q**3 + a*q**2 + a*q + a)/(a*q**4 + a*q**3 + a*q**2 + a*q + a)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 244$"
      ],
      "text/plain": [
       "244"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check.subs({a:a1[0],q:a1[1]})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4. D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(-2,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(-2, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(-2, 0)"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Circle(x**2+y**2-4*x-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-1.39411254969543 -3.39411254969543 6.78822509939086 6.78822509939086\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,0)\"><ellipse fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.135764501987817\" opacity=\"0.6\" cx=\"2.00000000000000\" cy=\"0\" rx=\"2.82842712474619\" ry=\"2.82842712474619\"/></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Circle}\\left(\\operatorname{Point2D}\\left(2, 0\\right), 2 \\sqrt{2}\\right)$"
      ],
      "text/plain": [
       "Circle(Point2D(2, 0), 2*sqrt(2))"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "C=c.center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(2, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(2, 0)"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "lines=c.tangent_lines(P)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-2.20000000000000 -2.20000000000000 2.40000000000000 2.40000000000000\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,-2.00000000000000)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.0480000000000000\" opacity=\"0.6\" d=\"M -2.00000000000000,0 L 0,-2.00000000000000\" marker-start=\"url(#markerReverseArrow)\" marker-end=\"url(#markerArrow)\"/></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(-2, 0\\right), \\operatorname{Point2D}\\left(0, -2\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(-2, 0), Point2D(0, -2))"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lines[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-2.20000000000000 -0.200000000000000 2.40000000000000 2.40000000000000\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,2.00000000000000)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.0480000000000000\" opacity=\"0.6\" d=\"M -2.00000000000000,0 L 0,2.00000000000000\" marker-start=\"url(#markerReverseArrow)\" marker-end=\"url(#markerArrow)\"/></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(-2, 0\\right), \\operatorname{Point2D}\\left(0, 2\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(-2, 0), Point2D(0, 2))"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lines[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,=Intersection(c,lines[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, -2\\right)$"
      ],
      "text/plain": [
       "Point2D(0, -2)"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "B,=Intersection(c,lines[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, 2\\right)$"
      ],
      "text/plain": [
       "Point2D(0, 2)"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "poly=Polygon(P,A,C,B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-2.40000000000000 -2.40000000000000 4.80000000000000 4.80000000000000\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,0)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.0960000000000000\" opacity=\"0.6\" d=\"M -2.00000000000000,0 L 0,-2.00000000000000 L 2.00000000000000,0 L 0,2.00000000000000 z\" /></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Polygon}\\left(\\operatorname{Point2D}\\left(-2, 0\\right), \\operatorname{Point2D}\\left(0, -2\\right), \\operatorname{Point2D}\\left(2, 0\\right), \\operatorname{Point2D}\\left(0, 2\\right)\\right)$"
      ],
      "text/plain": [
       "Polygon(Point2D(-2, 0), Point2D(0, -2), Point2D(2, 0), Point2D(0, 2))"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 8$"
      ],
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly.area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x > 0$"
      ],
      "text/plain": [
       "x > 0"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x>0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "x=symbols(\"x\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x>0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr1=x**2+x-7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{2} + x - 7$"
      ],
      "text/plain": [
       "x**2 + x - 7"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr2=2**x+x-7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2^{x} + x - 7$"
      ],
      "text/plain": [
       "2**x + x - 7"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr3=log(x,2)+x-7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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7LLLGDZsGG+99dZx79tsNiZNmkS7du349ddfycvLY9q0aRiGwb/+9S8nVCwiIiLS9Fx2oMTbb7/NjBkzKCgoqHX8u+++44ILLiAtLY3o6GgA5s6dyw033EB2dnaDBz1ooISIiIi4Epfrfj2Z5cuX06tXr5pAB3DeeedhtVpZu3atEysTERERaTou1/16MpmZmURERNQ61rZtW7y8vMjMzKz3OqvVitVqrXldVFTUZDWKiIiINLZm0VI3c+ZMLBbLCbc1a9Y0+H51raNqGMYJ11edPXs2wcHBNVtcXNxpfS8iIiIiztAsWuruuOMOrrzyyhOe0759+wbdKzIykpUrV9Y6lp+fT1VV1XEteMd6+OGHuffee2teFxUVKdiJiIiIy2gWoS4sLIywsLBGudewYcN48sknycjIICoqCoAffvgBb29vBgwYUO913t7eeHt7N0oNIiIiIo7WLELdqUhNTeXQoUOkpqZis9nYsGEDAJ06dSIgIIDx48fTo0cPrrvuOp555hkOHTrEfffdx/Tp0zWKVURERFosl5vS5IYbbuCdd9457vgvv/zC6NGjATP43Xbbbfz888/4+vpy9dVX8+yzz55SS5ymNBERERFX4nKhzlEU6kRERMSVNIvRryIiIiJyZhTqRERERFoAhToRERGRFkChTkRERKQFUKgTERERaQEU6kRERERaAE1pUg/DMCguLiYwMPCEa8aKiIiINAcKdSIiIiItgLpfRURERFoAhToRERGRFkChTkRERKQFUKgTERERaQEU6kRERERaAIU6ERERkRZAoU5ERESkBfh/VP8pnXjixScAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x107a65b10>"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr1,expr2,expr3,(x,0.2,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 6. A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on class Hyperbola in module quadratic_function.hyperbola:\n",
      "\n",
      "class Hyperbola(sympy.geometry.entity.GeometrySet)\n",
      " |  Hyperbola(center=None, real=None, imaginary=None, eccentricity=None, slope=None, **kwargs)\n",
      " |  \n",
      " |  An hyperbolic GeometryEntity.\n",
      " |  \n",
      " |  Parameters\n",
      " |  ==========\n",
      " |  \n",
      " |  center : Point, optional\n",
      " |      Default value is Point(0, 0)\n",
      " |  real : number or SymPy expression, optional\n",
      " |  imaginary : number or SymPy expression, optional\n",
      " |  eccentricity : number or SymPy expression, optional\n",
      " |      Two of `real`, `imaginary` and `eccentricity` must be supplied to\n",
      " |      create an Hyperbola. The third is derived from the two supplied.\n",
      " |  slope : number or SymPy expression, optional\n",
      " |      if the hyperbola's real radius is not on the x-axis,the slope should use.\n",
      " |  \n",
      " |  Attributes\n",
      " |  ==========\n",
      " |  \n",
      " |  center\n",
      " |  real\n",
      " |  imaginary\n",
      " |  circumference\n",
      " |  eccentricity\n",
      " |  periapsis\n",
      " |  apoapsis\n",
      " |  focus_distance\n",
      " |  foci\n",
      " |  \n",
      " |  Raises\n",
      " |  ======\n",
      " |  \n",
      " |  GeometryError\n",
      " |      When `real`, `imaginary` and `eccentricity` are incorrectly supplied\n",
      " |      as parameters.\n",
      " |  TypeError\n",
      " |      When `center` is not a Point.\n",
      " |  \n",
      " |  Notes\n",
      " |  -----\n",
      " |  Constructed from a center and two radii, the first being the horizontal\n",
      " |  radius (along the x-axis) and the second being the vertical radius (along\n",
      " |  the y-axis).\n",
      " |  \n",
      " |  When symbolic value for real and imaginary are used, any calculation that\n",
      " |  refers to the foci or the real or imaginary axis will assume that the hyperbola\n",
      " |  has its real radius on the x-axis. If this is not true then the slope is necessary.\n",
      " |  \n",
      " |  Examples\n",
      " |  ========\n",
      " |  \n",
      " |  >>> from sympy import Hyperbola, Point, Rational\n",
      " |  >>> e1 = Hyperbola(Point(0, 0), 5, 1)\n",
      " |  >>> e1.real, e1.imaginary\n",
      " |  (5, 1)\n",
      " |  >>> e2 = Hyperbola(Point(3, 1), real=3, eccentricity=Rational(5, 3))\n",
      " |  >>> e2\n",
      " |  Hyperbola(Point2D(3, 1), 3, 4, 0)\n",
      " |  \n",
      " |  Method resolution order:\n",
      " |      Hyperbola\n",
      " |      sympy.geometry.entity.GeometrySet\n",
      " |      sympy.geometry.entity.GeometryEntity\n",
      " |      sympy.sets.sets.Set\n",
      " |      sympy.core.basic.Basic\n",
      " |      sympy.printing.defaults.Printable\n",
      " |      sympy.core.evalf.EvalfMixin\n",
      " |      builtins.object\n",
      " |  \n",
      " |  Methods defined here:\n",
      " |  \n",
      " |  __contains__(self, o)\n",
      " |      Subclasses should implement this method for anything more complex than equality.\n",
      " |  \n",
      " |  __eq__(self, o)\n",
      " |      Is the other GeometryEntity the same as this hyperbola?\n",
      " |  \n",
      " |  __hash__(self)\n",
      " |      Return hash(self).\n",
      " |  \n",
      " |  arbitrary_point(self, parameter='t')\n",
      " |      A parameterized point on the hyperbola.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      parameter : str, optional\n",
      " |          Default value is 't'.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      arbitrary_point : Point\n",
      " |      \n",
      " |      Raises\n",
      " |      ======\n",
      " |      \n",
      " |      ValueError\n",
      " |          When `parameter` already appears in the functions.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.geometry.point.Point\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> e1 = Hyperbola(Point(0, 0), 3, 2)\n",
      " |      >>> e1.arbitrary_point()\n",
      " |      Point2D(3/cos(t), 2*tan(t))\n",
      " |  \n",
      " |  encloses_point(self, p)\n",
      " |      Return True if p is enclosed by (is inside of) self.\n",
      " |      \n",
      " |      Notes\n",
      " |      -----\n",
      " |      Being on the border of self is considered False.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      p : Point\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      encloses_point : True, False or None\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.geometry.point.Point\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Hyperbola, S\n",
      " |      >>> from sympy.abc import t\n",
      " |      >>> e = Hyperbola((0, 0), 3, 2)\n",
      " |      >>> e.encloses_point((0, 0))\n",
      " |      False\n",
      " |      >>> e.encloses_point(e.arbitrary_point(t).subs(t, S.Half))\n",
      " |      False\n",
      " |      >>> e.encloses_point((4, 0))\n",
      " |      True\n",
      " |  \n",
      " |  equation(self, x='x', y='y', _slope=None)\n",
      " |      Returns the equation of an hyperbola aligned with the x and y axes;\n",
      " |      when slope is given, the equation returned corresponds to an hyperbola\n",
      " |      with a real axis having that slope.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      x : str, optional\n",
      " |          Label for the x-axis. Default value is 'x'.\n",
      " |      y : str, optional\n",
      " |          Label for the y-axis. Default value is 'y'.\n",
      " |      _slope : Expr, optional\n",
      " |              The slope of the real axis. Ignored when 'None'.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      equation : SymPy expression\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      arbitrary_point : Returns parameterized point on hyperbola\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola, pi\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> e1 = Hyperbola(Point(1, 0), 3, 2)\n",
      " |      >>> eq1 = e1.equation(x, y); eq1\n",
      " |      -y**2/4 + (x - 1)**2/9 - 1\n",
      " |      >>> eq2 = e1.equation(x, y, self.slope=1); eq2\n",
      " |      -(-x + y + 1)**2/8 + (x + y - 1)**2/18 - 1\n",
      " |      \n",
      " |      A point on e1 satisfies eq1. Let's use one on the x-axis:\n",
      " |      \n",
      " |      >>> p1 = e1.center + Point(e1.real, 0)\n",
      " |      >>> assert eq1.subs(x, p1.x).subs(y, p1.y) == 0\n",
      " |      \n",
      " |      When rotated the same as the rotated hyperbola, about the center\n",
      " |      point of the hyperbola, it will satisfy the rotated hyperbola's\n",
      " |      equation, too:\n",
      " |      \n",
      " |      >>> r1 = p1.rotate(pi/4, e1.center)\n",
      " |      >>> assert eq2.subs(x, r1.x).subs(y, r1.y) == 0\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      .. [1] https://math.stackexchange.com/questions/108270/what-is-the-equation-of-an-hyperbola-that-is-not-aligned-with-the-axis\n",
      " |      .. [2] https://en.wikipedia.org/wiki/Hyperbola#Shifted_hyperbola\n",
      " |  \n",
      " |  evolute(self, x='x', y='y')\n",
      " |      The equation of evolute of the hyperbola.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      x : str, optional\n",
      " |          Label for the x-axis. Default value is 'x'.\n",
      " |      y : str, optional\n",
      " |          Label for the y-axis. Default value is 'y'.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      equation : SymPy expression\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> e1 = Hyperbola(Point(1, 0), 3, 2)\n",
      " |      >>> e1.evolute()\n",
      " |      2**(2/3)*y**(2/3) + (3*x - 3)**(2/3) - 5**(2/3)\n",
      " |  \n",
      " |  intersection(self, o)\n",
      " |      The intersection of this hyperbola and another geometrical entity\n",
      " |      `o`.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      o : GeometryEntity\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      intersection : list of GeometryEntity objects\n",
      " |      \n",
      " |      Notes\n",
      " |      -----\n",
      " |      Currently supports intersections with Point, Line, Segment, Ray,\n",
      " |      Circle and Hyperbola types.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.geometry.entity.GeometryEntity\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Hyperbola, Point, Line\n",
      " |      >>> e = Hyperbola(Point(0, 0), 5, 7)\n",
      " |      >>> e.intersection(Point(0, 0))\n",
      " |      []\n",
      " |      >>> e.intersection(Point(5, 0))\n",
      " |      [Point2D(5, 0)]\n",
      " |      >>> e.intersection(Line(Point(0,0), Point(0, 1)))\n",
      " |      []\n",
      " |      >>> e.intersection(Line(Point(5,0), Point(5, 1)))\n",
      " |      [Point2D(5, 0)]\n",
      " |      >>> e.intersection(Line(Point(6,0), Point(6, 1)))\n",
      " |      []\n",
      " |      >>> e = Hyperbola(Point(-1, 0), 4, 3)\n",
      " |      >>> e.intersection(Hyperbola(Point(1, 0), 4, 3))\n",
      " |      [Point2D(0, -3*sqrt(15)/4), Point2D(0, 3*sqrt(15)/4)]\n",
      " |      >>> e.intersection(Hyperbola(Point(5, 0), 4, 3))\n",
      " |      [Point2D(2, -3*sqrt(7)/4), Point2D(2, 3*sqrt(7)/4)]\n",
      " |      >>> e.intersection(Hyperbola(Point(100500, 0), 4, 3))\n",
      " |      []\n",
      " |      >>> e.intersection(Hyperbola(Point(0, 0), 3, 4))\n",
      " |      [Point2D(3, 0), Point2D(-363/175, -48*sqrt(111)/175), Point2D(-363/175, 48*sqrt(111)/175)]\n",
      " |      >>> e.intersection(Hyperbola(Point(-1, 0), 3, 4))\n",
      " |      [Point2D(-17/5, -12/5), Point2D(-17/5, 12/5), Point2D(7/5, -12/5), Point2D(7/5, 12/5)]\n",
      " |  \n",
      " |  is_tangent(self, o)\n",
      " |      Is `o` tangent to the hyperbola?\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      o : GeometryEntity\n",
      " |          An Hyperbola, LinearEntity or Polygon\n",
      " |      \n",
      " |      Raises\n",
      " |      ======\n",
      " |      \n",
      " |      NotImplementedError\n",
      " |          When the wrong type of argument is supplied.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      is_tangent: boolean\n",
      " |          True if o is tangent to the hyperbola, False otherwise.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      tangent_lines\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola, Line\n",
      " |      >>> p0, p1, p2 = Point(0, 0), Point(3, 0), Point(3, 3)\n",
      " |      >>> e1 = Hyperbola(p0, 3, 2)\n",
      " |      >>> l1 = Line(p1, p2)\n",
      " |      >>> e1.is_tangent(l1)\n",
      " |      True\n",
      " |  \n",
      " |  normal_lines(self, p, prec=None)\n",
      " |      Normal lines between `p` and the hyperbola.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      p : Point\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      normal_lines : list with 1, 2 or 4 Lines\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> e = Hyperbola((0, 0), 2, 3)\n",
      " |      >>> c = e.center\n",
      " |      >>> e.normal_lines(c + Point(1, 0))\n",
      " |      [Line2D(Point2D(0, 0), Point2D(1, 0))]\n",
      " |      >>> e.normal_lines(c)\n",
      " |      [Line2D(Point2D(0, 0), Point2D(0, 1)), Line2D(Point2D(0, 0), Point2D(1, 0))]\n",
      " |      \n",
      " |      Off-axis points require the solution of a quartic equation. This\n",
      " |      often leads to very large expressions that may be of little practical\n",
      " |      use. An approximate solution of `prec` digits can be obtained by\n",
      " |      passing in the desired value:\n",
      " |      \n",
      " |      >>> e.normal_lines((3, 3), prec=2)\n",
      " |      [Line2D(Point2D(-0.81, -2.7), Point2D(0.19, -1.2)),\n",
      " |      Line2D(Point2D(1.5, -2.0), Point2D(2.5, -2.7))]\n",
      " |      \n",
      " |      Whereas the above solution has an operation count of 12, the exact\n",
      " |      solution has an operation count of 2020.\n",
      " |  \n",
      " |  plot_interval(self, parameter='t')\n",
      " |      The plot interval for the default geometric plot of the Hyperbola.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      parameter : str, optional\n",
      " |          Default value is 't'.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      plot_interval : list\n",
      " |          [parameter, lower_bound, upper_bound]\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> e1 = Hyperbola(Point(0, 0), 3, 2)\n",
      " |      >>> e1.plot_interval()\n",
      " |      [t, -pi, pi]\n",
      " |  \n",
      " |  polar_second_moment_of_area(self)\n",
      " |      Returns the polar second moment of area of an Hyperbola\n",
      " |      \n",
      " |      It is a constituent of the second moment of area, linked through\n",
      " |      the perpendicular axis theorem. While the planar second moment of\n",
      " |      area describes an object's resistance to deflection (bending) when\n",
      " |      subjected to a force applied to a plane parallel to the central\n",
      " |      axis, the polar second moment of area describes an object's\n",
      " |      resistance to deflection when subjected to a moment applied in a\n",
      " |      plane perpendicular to the object's central axis (i.e. parallel to\n",
      " |      the cross-section)\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import symbols, Circle, Hyperbola\n",
      " |      >>> c = Circle((5, 5), 4)\n",
      " |      >>> c.polar_second_moment_of_area()\n",
      " |      128*pi\n",
      " |      >>> a, b = symbols('a, b')\n",
      " |      >>> e = Hyperbola((0, 0), a, b)\n",
      " |      >>> e.polar_second_moment_of_area()\n",
      " |      pi*a**3*b/4 + pi*a*b**3/4\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      .. [1] https://en.wikipedia.org/wiki/Polar_moment_of_inertia\n",
      " |  \n",
      " |  random_point(self, seed=None)\n",
      " |      A random point on the hyperbola.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      point : Point\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> e1 = Hyperbola(Point(0, 0), 2, 3)\n",
      " |      >>> e1.random_point() # gives some random point\n",
      " |      Point2D(...)\n",
      " |      >>> p1 = e1.random_point(seed=0); p1.n(2)\n",
      " |      Point2D(2.9, -3.2)\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      When creating a random point, one may simply replace the\n",
      " |      parameter with a random number. When doing so, however, the\n",
      " |      random number should be made a Rational or else the point\n",
      " |      may not test as being in the hyperbola:\n",
      " |      \n",
      " |      >>> from sympy.abc import t\n",
      " |      >>> from sympy import Rational\n",
      " |      >>> arb = e1.arbitrary_point(t); arb\n",
      " |      Point2D(3*cos(t), 2*sin(t))\n",
      " |      >>> arb.subs(t, .1) in e1\n",
      " |      False\n",
      " |      >>> arb.subs(t, Rational(.1)) in e1\n",
      " |      True\n",
      " |      >>> arb.subs(t, Rational('.1')) in e1\n",
      " |      True\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      sympy.geometry.point.Point\n",
      " |      arbitrary_point : Returns parameterized point on hyperbola\n",
      " |  \n",
      " |  reflect(self, line)\n",
      " |      Override GeometryEntity.reflect since the radius\n",
      " |      is not a GeometryEntity.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Circle, Line\n",
      " |      >>> Circle((0, 1), 1).reflect(Line((0, 0), (1, 1)))\n",
      " |      Circle(Point2D(1, 0), -1)\n",
      " |      >>> from sympy import Hyperbola, Line, Point\n",
      " |      >>> Hyperbola(Point(3, 4), 1, 3).reflect(Line(Point(0, -4), Point(5, 0)))\n",
      " |      Traceback (most recent call last):\n",
      " |      ...\n",
      " |      NotImplementedError:\n",
      " |      General Hyperbola is not supported but the equation of the reflected\n",
      " |      Hyperbola is given by the zeros of: f(x, y) = (9*x/41 + 40*y/41 +\n",
      " |      37/41)**2 + (40*x/123 - 3*y/41 - 364/123)**2 - 1\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      Until the general hyperbola (with no axis parallel to the x-axis) is\n",
      " |      supported a NotImplemented error is raised and the equation whose\n",
      " |      zeros define the rotated hyperbola is given.\n",
      " |  \n",
      " |  rotate(self, angle=0, pt=None)\n",
      " |      Rotate ``angle`` radians counterclockwise about Point ``pt``.\n",
      " |      \n",
      " |      Note: since the general hyperbola is not supported, only rotations that\n",
      " |      are integer multiples of pi/2 are allowed.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Hyperbola, pi\n",
      " |      >>> Hyperbola((1, 0), 2, 1).rotate(pi/2)\n",
      " |      Hyperbola(Point2D(0, 1), 1, 2)\n",
      " |      >>> Hyperbola((1, 0), 2, 1).rotate(pi)\n",
      " |      Hyperbola(Point2D(-1, 0), 2, 1)\n",
      " |  \n",
      " |  scale(self, x=1, y=1, pt=None)\n",
      " |      Override GeometryEntity.scale since it is the real and imaginary\n",
      " |      axes which must be scaled and they are not GeometryEntities.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Hyperbola\n",
      " |      >>> Hyperbola((0, 0), 2, 1).scale(2, 4)\n",
      " |      Circle(Point2D(0, 0), 4)\n",
      " |      >>> Hyperbola((0, 0), 2, 1).scale(2)\n",
      " |      Hyperbola(Point2D(0, 0), 4, 1)\n",
      " |  \n",
      " |  second_moment_of_area(self, point=None)\n",
      " |      Returns the second moment and product moment area of an hyperbola.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      point : Point, two-tuple of sympifiable objects, or None(default=None)\n",
      " |          point is the point about which second moment of area is to be found.\n",
      " |          If \"point=None\" it will be calculated about the axis passing through the\n",
      " |          centroid of the hyperbola.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      I_xx, I_yy, I_xy : number or SymPy expression\n",
      " |          I_xx, I_yy are second moment of area of an ellise.\n",
      " |          I_xy is product moment of area of an hyperbola.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.second_moment_of_area()\n",
      " |      (3*pi/4, 27*pi/4, 0)\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      .. [1] https://en.wikipedia.org/wiki/List_of_second_moments_of_area\n",
      " |  \n",
      " |  section_modulus(self, point=None)\n",
      " |      Returns a tuple with the section modulus of an hyperbola\n",
      " |      \n",
      " |      Section modulus is a geometric property of an hyperbola defined as the\n",
      " |      ratio of second moment of area to the distance of the extreme end of\n",
      " |      the hyperbola from the centroidal axis.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      point : Point, two-tuple of sympifyable objects, or None(default=None)\n",
      " |          point is the point at which section modulus is to be found.\n",
      " |          If \"point=None\" section modulus will be calculated for the\n",
      " |          point farthest from the centroidal axis of the hyperbola.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      S_x, S_y: numbers or SymPy expressions\n",
      " |                S_x is the section modulus with respect to the x-axis\n",
      " |                S_y is the section modulus with respect to the y-axis\n",
      " |                A negative sign indicates that the section modulus is\n",
      " |                determined for a point below the centroidal axis.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Symbol, Hyperbola, Circle, Point2D\n",
      " |      >>> d = Symbol('d', positive=True)\n",
      " |      >>> c = Circle((0, 0), d/2)\n",
      " |      >>> c.section_modulus()\n",
      " |      (pi*d**3/32, pi*d**3/32)\n",
      " |      >>> e = Hyperbola(Point2D(0, 0), 2, 4)\n",
      " |      >>> e.section_modulus()\n",
      " |      (8*pi, 4*pi)\n",
      " |      >>> e.section_modulus((2, 2))\n",
      " |      (16*pi, 4*pi)\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      .. [1] https://en.wikipedia.org/wiki/Section_modulus\n",
      " |  \n",
      " |  tangent_lines(self, p)\n",
      " |      Tangent lines between `p` and the hyperbola.\n",
      " |      \n",
      " |      If `p` is on the hyperbola, returns the tangent line through point `p`.\n",
      " |      Otherwise, returns the tangent line(s) from `p` to the hyperbola, or\n",
      " |      None if no tangent line is possible (e.g., `p` inside hyperbola).\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      p : Point\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      tangent_lines : list with 1 or 2 Lines\n",
      " |      \n",
      " |      Raises\n",
      " |      ======\n",
      " |      \n",
      " |      NotImplementedError\n",
      " |          Can only find tangent lines for a point, `p`, on the hyperbola.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.geometry.point.Point, sympy.geometry.line.Line\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> e1 = Hyperbola(Point(0, 0), 3, 2)\n",
      " |      >>> e1.tangent_lines(Point(3, 0))\n",
      " |      [Line2D(Point2D(3, 0), Point2D(3, -12))]\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Static methods defined here:\n",
      " |  \n",
      " |  __new__(cls, center=None, real=None, imaginary=None, eccentricity=None, slope=None, **kwargs)\n",
      " |      Create and return a new object.  See help(type) for accurate signature.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties defined here:\n",
      " |  \n",
      " |  ambient_dimension\n",
      " |      What is the dimension of the space that the object is contained in?\n",
      " |  \n",
      " |  apoapsis\n",
      " |      The apoapsis of the hyperbola.\n",
      " |      \n",
      " |      The shortest distance between the focus and the longer contour.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      apoapsis : number or SymPy expression\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      periapsis : Returns shortest distance between foci and the lear contour\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.apoapsis\n",
      " |      3 + sqrt(10)\n",
      " |  \n",
      " |  asymptote\n",
      " |      Returns a the two asymptote of the hyperbola in a list.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Hyperbola, Point, symbols\n",
      " |      >>> c = Point(1, 2)\n",
      " |      >>> Hyperbola(c, 8, 7).asymptote\n",
      " |      [Line2D(Point2D(1, 2), Point2D(-8, 7)), Line2D(Point2D(1, 2), Point2D(8, 7))]\n",
      " |      >>> a, b = symbols('a b')\n",
      " |      >>> Hyperbola(c, a, b).asymptote\n",
      " |      [Line2D(Point2D(1, 2), Point2D(-a, b)), Line2D(Point2D(1, 2), Point2D(a, b))]\n",
      " |  \n",
      " |  center\n",
      " |      The center of the hyperbola.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      center : Point\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.geometry.point.Point\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.center\n",
      " |      Point2D(0, 0)\n",
      " |  \n",
      " |  eccentricity\n",
      " |      The eccentricity of the hyperbola.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      eccentricity : number\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola, sqrt\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, sqrt(2))\n",
      " |      >>> e1.eccentricity\n",
      " |      sqrt(11)/3\n",
      " |  \n",
      " |  foci\n",
      " |      The foci of the hyperbola.\n",
      " |      \n",
      " |      Notes\n",
      " |      -----\n",
      " |      The foci can only be calculated if the real/imaginary axes are known.\n",
      " |      \n",
      " |      Raises\n",
      " |      ======\n",
      " |      \n",
      " |      ValueError\n",
      " |          When the real and imaginary axis cannot be determined.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.geometry.point.Point\n",
      " |      focus_distance : Returns the distance between focus and center\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.foci\n",
      " |      (Point2D(-sqrt(10), 0), Point2D(sqrt(10), 0))\n",
      " |  \n",
      " |  focus_distance\n",
      " |      The focal distance of the hyperbola.\n",
      " |      \n",
      " |      The distance between the center and one focus.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      focus_distance : number\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      foci\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.focus_distance\n",
      " |      sqrt(10)\n",
      " |  \n",
      " |  imaginary\n",
      " |      The vertical radius of the hyperbola.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      imaginary : number\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      real, imaginary\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.imaginary\n",
      " |      1\n",
      " |  \n",
      " |  periapsis\n",
      " |      The periapsis of the hyperbola.\n",
      " |      \n",
      " |      The shortest distance between the focus and the lear contour.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      periapsis : number\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      apoapsis : Returns shottest distance between focus and the longer  contour\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.periapsis\n",
      " |      3 - sqrt(10)\n",
      " |  \n",
      " |  real\n",
      " |      The real axis of the hyperbola.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      real : number\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      imaginary, real, imaginary\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.real\n",
      " |      3\n",
      " |  \n",
      " |  semilatus_rectum\n",
      " |      Calculates the semi-latus rectum of the Hyperbola.\n",
      " |      \n",
      " |      Semi-latus rectum is defined as one half of the chord through a\n",
      " |      focus parallel to the conic section directrix of a conic section.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      semilatus_rectum : number\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      apoapsis : Returns greatest distance between focus and contour\n",
      " |      \n",
      " |      periapsis : The shortest distance between the focus and the contour\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Point, Hyperbola\n",
      " |      >>> p1 = Point(0, 0)\n",
      " |      >>> e1 = Hyperbola(p1, 3, 1)\n",
      " |      >>> e1.semilatus_rectum\n",
      " |      1/3\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      .. [1] https://mathworld.wolfram.com/SemilatusRectum.html\n",
      " |      .. [2] https://en.wikipedia.org/wiki/Hyperbola#Semi-latus_rectum\n",
      " |  \n",
      " |  slope\n",
      " |      Returns the tangent of a angle which is real axis and x-axis.\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      slope : number\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> O=Point(0,0)\n",
      " |      >>> para=Parabola(O,3,4)\n",
      " |      >>> para.slope\n",
      " |      0\n",
      " |      >>> para=Parabola(O,3,3,1)\n",
      " |      >>> expand(para.equation())\n",
      " |      x*y - 9/2\n",
      " |      >>> para.slope\n",
      " |      1\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data descriptors defined here:\n",
      " |  \n",
      " |  __dict__\n",
      " |      dictionary for instance variables (if defined)\n",
      " |  \n",
      " |  __weakref__\n",
      " |      list of weak references to the object (if defined)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes defined here:\n",
      " |  \n",
      " |  __annotations__ = {}\n",
      " |  \n",
      " |  default_assumptions = {}\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sympy.geometry.entity.GeometryEntity:\n",
      " |  \n",
      " |  __cmp__(self, other)\n",
      " |      Comparison of two GeometryEntities.\n",
      " |  \n",
      " |  __getnewargs__(self)\n",
      " |      Returns a tuple that will be passed to __new__ on unpickling.\n",
      " |  \n",
      " |  __ne__(self, o)\n",
      " |      Test inequality of two geometrical entities.\n",
      " |  \n",
      " |  __radd__(self, a)\n",
      " |      Implementation of reverse add method.\n",
      " |  \n",
      " |  __repr__(self)\n",
      " |      String representation of a GeometryEntity that can be evaluated\n",
      " |      by sympy.\n",
      " |  \n",
      " |  __rmul__(self, a)\n",
      " |      Implementation of reverse multiplication method.\n",
      " |  \n",
      " |  __rsub__(self, a)\n",
      " |      Implementation of reverse subtraction method.\n",
      " |  \n",
      " |  __rtruediv__(self, a)\n",
      " |      Implementation of reverse division method.\n",
      " |  \n",
      " |  __str__(self)\n",
      " |      String representation of a GeometryEntity.\n",
      " |  \n",
      " |  encloses(self, o)\n",
      " |      Return True if o is inside (not on or outside) the boundaries of self.\n",
      " |      \n",
      " |      The object will be decomposed into Points and individual Entities need\n",
      " |      only define an encloses_point method for their class.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.geometry.ellipse.Ellipse.encloses_point\n",
      " |      sympy.geometry.polygon.Polygon.encloses_point\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import RegularPolygon, Point, Polygon\n",
      " |      >>> t  = Polygon(*RegularPolygon(Point(0, 0), 1, 3).vertices)\n",
      " |      >>> t2 = Polygon(*RegularPolygon(Point(0, 0), 2, 3).vertices)\n",
      " |      >>> t2.encloses(t)\n",
      " |      True\n",
      " |      >>> t.encloses(t2)\n",
      " |      False\n",
      " |  \n",
      " |  equals(self, o)\n",
      " |  \n",
      " |  is_similar(self, other)\n",
      " |      Is this geometrical entity similar to another geometrical entity?\n",
      " |      \n",
      " |      Two entities are similar if a uniform scaling (enlarging or\n",
      " |      shrinking) of one of the entities will allow one to obtain the other.\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      This method is not intended to be used directly but rather\n",
      " |      through the `are_similar` function found in util.py.\n",
      " |      An entity is not required to implement this method.\n",
      " |      If two different types of entities can be similar, it is only\n",
      " |      required that one of them be able to determine this.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      scale\n",
      " |  \n",
      " |  parameter_value(self, other, t)\n",
      " |      Return the parameter corresponding to the given point.\n",
      " |      Evaluating an arbitrary point of the entity at this parameter\n",
      " |      value will return the given point.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Line, Point\n",
      " |      >>> from sympy.abc import t\n",
      " |      >>> a = Point(0, 0)\n",
      " |      >>> b = Point(2, 2)\n",
      " |      >>> Line(a, b).parameter_value((1, 1), t)\n",
      " |      {t: 1/2}\n",
      " |      >>> Line(a, b).arbitrary_point(t).subs(_)\n",
      " |      Point2D(1, 1)\n",
      " |  \n",
      " |  translate(self, x=0, y=0)\n",
      " |      Shift the object by adding to the x,y-coordinates the values x and y.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      rotate, scale\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import RegularPolygon, Point, Polygon\n",
      " |      >>> t = Polygon(*RegularPolygon(Point(0, 0), 1, 3).vertices)\n",
      " |      >>> t\n",
      " |      Triangle(Point2D(1, 0), Point2D(-1/2, sqrt(3)/2), Point2D(-1/2, -sqrt(3)/2))\n",
      " |      >>> t.translate(2)\n",
      " |      Triangle(Point2D(3, 0), Point2D(3/2, sqrt(3)/2), Point2D(3/2, -sqrt(3)/2))\n",
      " |      >>> t.translate(2, 2)\n",
      " |      Triangle(Point2D(3, 2), Point2D(3/2, sqrt(3)/2 + 2), Point2D(3/2, 2 - sqrt(3)/2))\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from sympy.geometry.entity.GeometryEntity:\n",
      " |  \n",
      " |  bounds\n",
      " |      Return a tuple (xmin, ymin, xmax, ymax) representing the bounding\n",
      " |      rectangle for the geometric figure.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sympy.sets.sets.Set:\n",
      " |  \n",
      " |  __add__(self, other)\n",
      " |  \n",
      " |  __and__(self, other)\n",
      " |  \n",
      " |  __mul__(self, other)\n",
      " |  \n",
      " |  __or__(self, other)\n",
      " |      Return self|value.\n",
      " |  \n",
      " |  __pow__(self, exp)\n",
      " |  \n",
      " |  __sub__(self, other)\n",
      " |  \n",
      " |  __xor__(self, other)\n",
      " |  \n",
      " |  complement(self, universe)\n",
      " |      The complement of 'self' w.r.t the given universe.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval, S\n",
      " |      >>> Interval(0, 1).complement(S.Reals)\n",
      " |      Union(Interval.open(-oo, 0), Interval.open(1, oo))\n",
      " |      \n",
      " |      >>> Interval(0, 1).complement(S.UniversalSet)\n",
      " |      Complement(UniversalSet, Interval(0, 1))\n",
      " |  \n",
      " |  contains(self, other)\n",
      " |      Returns a SymPy value indicating whether ``other`` is contained\n",
      " |      in ``self``: ``true`` if it is, ``false`` if it is not, else\n",
      " |      an unevaluated ``Contains`` expression (or, as in the case of\n",
      " |      ConditionSet and a union of FiniteSet/Intervals, an expression\n",
      " |      indicating the conditions for containment).\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval, S\n",
      " |      >>> from sympy.abc import x\n",
      " |      \n",
      " |      >>> Interval(0, 1).contains(0.5)\n",
      " |      True\n",
      " |      \n",
      " |      As a shortcut it is possible to use the ``in`` operator, but that\n",
      " |      will raise an error unless an affirmative true or false is not\n",
      " |      obtained.\n",
      " |      \n",
      " |      >>> Interval(0, 1).contains(x)\n",
      " |      (0 <= x) & (x <= 1)\n",
      " |      >>> x in Interval(0, 1)\n",
      " |      Traceback (most recent call last):\n",
      " |      ...\n",
      " |      TypeError: did not evaluate to a bool: None\n",
      " |      \n",
      " |      The result of 'in' is a bool, not a SymPy value\n",
      " |      \n",
      " |      >>> 1 in Interval(0, 2)\n",
      " |      True\n",
      " |      >>> _ is S.true\n",
      " |      False\n",
      " |  \n",
      " |  intersect(self, other)\n",
      " |      Returns the intersection of 'self' and 'other'.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      \n",
      " |      >>> Interval(1, 3).intersect(Interval(1, 2))\n",
      " |      Interval(1, 2)\n",
      " |      \n",
      " |      >>> from sympy import imageset, Lambda, symbols, S\n",
      " |      >>> n, m = symbols('n m')\n",
      " |      >>> a = imageset(Lambda(n, 2*n), S.Integers)\n",
      " |      >>> a.intersect(imageset(Lambda(m, 2*m + 1), S.Integers))\n",
      " |      EmptySet\n",
      " |  \n",
      " |  is_disjoint(self, other)\n",
      " |      Returns True if ``self`` and ``other`` are disjoint.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 2).is_disjoint(Interval(1, 2))\n",
      " |      False\n",
      " |      >>> Interval(0, 2).is_disjoint(Interval(3, 4))\n",
      " |      True\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      .. [1] https://en.wikipedia.org/wiki/Disjoint_sets\n",
      " |  \n",
      " |  is_proper_subset(self, other)\n",
      " |      Returns True if ``self`` is a proper subset of ``other``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 0.5).is_proper_subset(Interval(0, 1))\n",
      " |      True\n",
      " |      >>> Interval(0, 1).is_proper_subset(Interval(0, 1))\n",
      " |      False\n",
      " |  \n",
      " |  is_proper_superset(self, other)\n",
      " |      Returns True if ``self`` is a proper superset of ``other``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 1).is_proper_superset(Interval(0, 0.5))\n",
      " |      True\n",
      " |      >>> Interval(0, 1).is_proper_superset(Interval(0, 1))\n",
      " |      False\n",
      " |  \n",
      " |  is_subset(self, other)\n",
      " |      Returns True if ``self`` is a subset of ``other``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 0.5).is_subset(Interval(0, 1))\n",
      " |      True\n",
      " |      >>> Interval(0, 1).is_subset(Interval(0, 1, left_open=True))\n",
      " |      False\n",
      " |  \n",
      " |  is_superset(self, other)\n",
      " |      Returns True if ``self`` is a superset of ``other``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 0.5).is_superset(Interval(0, 1))\n",
      " |      False\n",
      " |      >>> Interval(0, 1).is_superset(Interval(0, 1, left_open=True))\n",
      " |      True\n",
      " |  \n",
      " |  isdisjoint(self, other)\n",
      " |      Alias for :meth:`is_disjoint()`\n",
      " |  \n",
      " |  issubset(self, other)\n",
      " |      Alias for :meth:`is_subset()`\n",
      " |  \n",
      " |  issuperset(self, other)\n",
      " |      Alias for :meth:`is_superset()`\n",
      " |  \n",
      " |  powerset(self)\n",
      " |      Find the Power set of ``self``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import EmptySet, FiniteSet, Interval\n",
      " |      \n",
      " |      A power set of an empty set:\n",
      " |      \n",
      " |      >>> A = EmptySet\n",
      " |      >>> A.powerset()\n",
      " |      {EmptySet}\n",
      " |      \n",
      " |      A power set of a finite set:\n",
      " |      \n",
      " |      >>> A = FiniteSet(1, 2)\n",
      " |      >>> a, b, c = FiniteSet(1), FiniteSet(2), FiniteSet(1, 2)\n",
      " |      >>> A.powerset() == FiniteSet(a, b, c, EmptySet)\n",
      " |      True\n",
      " |      \n",
      " |      A power set of an interval:\n",
      " |      \n",
      " |      >>> Interval(1, 2).powerset()\n",
      " |      PowerSet(Interval(1, 2))\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      \n",
      " |      .. [1] https://en.wikipedia.org/wiki/Power_set\n",
      " |  \n",
      " |  symmetric_difference(self, other)\n",
      " |      Returns symmetric difference of ``self`` and ``other``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval, S\n",
      " |      >>> Interval(1, 3).symmetric_difference(S.Reals)\n",
      " |      Union(Interval.open(-oo, 1), Interval.open(3, oo))\n",
      " |      >>> Interval(1, 10).symmetric_difference(S.Reals)\n",
      " |      Union(Interval.open(-oo, 1), Interval.open(10, oo))\n",
      " |      \n",
      " |      >>> from sympy import S, EmptySet\n",
      " |      >>> S.Reals.symmetric_difference(EmptySet)\n",
      " |      Reals\n",
      " |      \n",
      " |      References\n",
      " |      ==========\n",
      " |      .. [1] https://en.wikipedia.org/wiki/Symmetric_difference\n",
      " |  \n",
      " |  union(self, other)\n",
      " |      Returns the union of ``self`` and ``other``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      As a shortcut it is possible to use the ``+`` operator:\n",
      " |      \n",
      " |      >>> from sympy import Interval, FiniteSet\n",
      " |      >>> Interval(0, 1).union(Interval(2, 3))\n",
      " |      Union(Interval(0, 1), Interval(2, 3))\n",
      " |      >>> Interval(0, 1) + Interval(2, 3)\n",
      " |      Union(Interval(0, 1), Interval(2, 3))\n",
      " |      >>> Interval(1, 2, True, True) + FiniteSet(2, 3)\n",
      " |      Union({3}, Interval.Lopen(1, 2))\n",
      " |      \n",
      " |      Similarly it is possible to use the ``-`` operator for set differences:\n",
      " |      \n",
      " |      >>> Interval(0, 2) - Interval(0, 1)\n",
      " |      Interval.Lopen(1, 2)\n",
      " |      >>> Interval(1, 3) - FiniteSet(2)\n",
      " |      Union(Interval.Ropen(1, 2), Interval.Lopen(2, 3))\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from sympy.sets.sets.Set:\n",
      " |  \n",
      " |  boundary\n",
      " |      The boundary or frontier of a set.\n",
      " |      \n",
      " |      Explanation\n",
      " |      ===========\n",
      " |      \n",
      " |      A point x is on the boundary of a set S if\n",
      " |      \n",
      " |      1.  x is in the closure of S.\n",
      " |          I.e. Every neighborhood of x contains a point in S.\n",
      " |      2.  x is not in the interior of S.\n",
      " |          I.e. There does not exist an open set centered on x contained\n",
      " |          entirely within S.\n",
      " |      \n",
      " |      There are the points on the outer rim of S.  If S is open then these\n",
      " |      points need not actually be contained within S.\n",
      " |      \n",
      " |      For example, the boundary of an interval is its start and end points.\n",
      " |      This is true regardless of whether or not the interval is open.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 1).boundary\n",
      " |      {0, 1}\n",
      " |      >>> Interval(0, 1, True, False).boundary\n",
      " |      {0, 1}\n",
      " |  \n",
      " |  closure\n",
      " |      Property method which returns the closure of a set.\n",
      " |      The closure is defined as the union of the set itself and its\n",
      " |      boundary.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      >>> from sympy import S, Interval\n",
      " |      >>> S.Reals.closure\n",
      " |      Reals\n",
      " |      >>> Interval(0, 1).closure\n",
      " |      Interval(0, 1)\n",
      " |  \n",
      " |  inf\n",
      " |      The infimum of ``self``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval, Union\n",
      " |      >>> Interval(0, 1).inf\n",
      " |      0\n",
      " |      >>> Union(Interval(0, 1), Interval(2, 3)).inf\n",
      " |      0\n",
      " |  \n",
      " |  interior\n",
      " |      Property method which returns the interior of a set.\n",
      " |      The interior of a set S consists all points of S that do not\n",
      " |      belong to the boundary of S.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 1).interior\n",
      " |      Interval.open(0, 1)\n",
      " |      >>> Interval(0, 1).boundary.interior\n",
      " |      EmptySet\n",
      " |  \n",
      " |  is_EmptySet\n",
      " |  \n",
      " |  is_closed\n",
      " |      A property method to check whether a set is closed.\n",
      " |      \n",
      " |      Explanation\n",
      " |      ===========\n",
      " |      \n",
      " |      A set is closed if its complement is an open set. The closedness of a\n",
      " |      subset of the reals is determined with respect to R and its standard\n",
      " |      topology.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      >>> from sympy import Interval\n",
      " |      >>> Interval(0, 1).is_closed\n",
      " |      True\n",
      " |  \n",
      " |  is_open\n",
      " |      Property method to check whether a set is open.\n",
      " |      \n",
      " |      Explanation\n",
      " |      ===========\n",
      " |      \n",
      " |      A set is open if and only if it has an empty intersection with its\n",
      " |      boundary. In particular, a subset A of the reals is open if and only\n",
      " |      if each one of its points is contained in an open interval that is a\n",
      " |      subset of A.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      >>> from sympy import S\n",
      " |      >>> S.Reals.is_open\n",
      " |      True\n",
      " |      >>> S.Rationals.is_open\n",
      " |      False\n",
      " |  \n",
      " |  kind\n",
      " |      The kind of a Set\n",
      " |      \n",
      " |      Explanation\n",
      " |      ===========\n",
      " |      \n",
      " |      Any :class:`Set` will have kind :class:`SetKind` which is\n",
      " |      parametrised by the kind of the elements of the set. For example\n",
      " |      most sets are sets of numbers and will have kind\n",
      " |      ``SetKind(NumberKind)``. If elements of sets are different in kind than\n",
      " |      their kind will ``SetKind(UndefinedKind)``. See\n",
      " |      :class:`sympy.core.kind.Kind` for an explanation of the kind system.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval, Matrix, FiniteSet, EmptySet, ProductSet, PowerSet\n",
      " |      \n",
      " |      >>> FiniteSet(Matrix([1, 2])).kind\n",
      " |      SetKind(MatrixKind(NumberKind))\n",
      " |      \n",
      " |      >>> Interval(1, 2).kind\n",
      " |      SetKind(NumberKind)\n",
      " |      \n",
      " |      >>> EmptySet.kind\n",
      " |      SetKind()\n",
      " |      \n",
      " |      A :class:`sympy.sets.powerset.PowerSet` is a set of sets:\n",
      " |      \n",
      " |      >>> PowerSet({1, 2, 3}).kind\n",
      " |      SetKind(SetKind(NumberKind))\n",
      " |      \n",
      " |      A :class:`ProductSet` represents the set of tuples of elements of\n",
      " |      other sets. Its kind is :class:`sympy.core.containers.TupleKind`\n",
      " |      parametrised by the kinds of the elements of those sets:\n",
      " |      \n",
      " |      >>> p = ProductSet(FiniteSet(1, 2), FiniteSet(3, 4))\n",
      " |      >>> list(p)\n",
      " |      [(1, 3), (2, 3), (1, 4), (2, 4)]\n",
      " |      >>> p.kind\n",
      " |      SetKind(TupleKind(NumberKind, NumberKind))\n",
      " |      \n",
      " |      When all elements of the set do not have same kind, the kind\n",
      " |      will be returned as ``SetKind(UndefinedKind)``:\n",
      " |      \n",
      " |      >>> FiniteSet(0, Matrix([1, 2])).kind\n",
      " |      SetKind(UndefinedKind)\n",
      " |      \n",
      " |      The kind of the elements of a set are given by the ``element_kind``\n",
      " |      attribute of ``SetKind``:\n",
      " |      \n",
      " |      >>> Interval(1, 2).kind.element_kind\n",
      " |      NumberKind\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      NumberKind\n",
      " |      sympy.core.kind.UndefinedKind\n",
      " |      sympy.core.containers.TupleKind\n",
      " |      MatrixKind\n",
      " |      sympy.matrices.expressions.sets.MatrixSet\n",
      " |      sympy.sets.conditionset.ConditionSet\n",
      " |      Rationals\n",
      " |      Naturals\n",
      " |      Integers\n",
      " |      sympy.sets.fancysets.ImageSet\n",
      " |      sympy.sets.fancysets.Range\n",
      " |      sympy.sets.fancysets.ComplexRegion\n",
      " |      sympy.sets.powerset.PowerSet\n",
      " |      sympy.sets.sets.ProductSet\n",
      " |      sympy.sets.sets.Interval\n",
      " |      sympy.sets.sets.Union\n",
      " |      sympy.sets.sets.Intersection\n",
      " |      sympy.sets.sets.Complement\n",
      " |      sympy.sets.sets.EmptySet\n",
      " |      sympy.sets.sets.UniversalSet\n",
      " |      sympy.sets.sets.FiniteSet\n",
      " |      sympy.sets.sets.SymmetricDifference\n",
      " |      sympy.sets.sets.DisjointUnion\n",
      " |  \n",
      " |  measure\n",
      " |      The (Lebesgue) measure of ``self``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval, Union\n",
      " |      >>> Interval(0, 1).measure\n",
      " |      1\n",
      " |      >>> Union(Interval(0, 1), Interval(2, 3)).measure\n",
      " |      2\n",
      " |  \n",
      " |  sup\n",
      " |      The supremum of ``self``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Interval, Union\n",
      " |      >>> Interval(0, 1).sup\n",
      " |      1\n",
      " |      >>> Union(Interval(0, 1), Interval(2, 3)).sup\n",
      " |      3\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes inherited from sympy.sets.sets.Set:\n",
      " |  \n",
      " |  is_Complement = None\n",
      " |  \n",
      " |  is_ComplexRegion = False\n",
      " |  \n",
      " |  is_FiniteSet = False\n",
      " |  \n",
      " |  is_Intersection = None\n",
      " |  \n",
      " |  is_Interval = False\n",
      " |  \n",
      " |  is_ProductSet = False\n",
      " |  \n",
      " |  is_Union = False\n",
      " |  \n",
      " |  is_UniversalSet = None\n",
      " |  \n",
      " |  is_empty = None\n",
      " |  \n",
      " |  is_finite_set = None\n",
      " |  \n",
      " |  is_interval = False\n",
      " |  \n",
      " |  is_iterable = False\n",
      " |  \n",
      " |  is_number = False\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  __getstate__(self)\n",
      " |      Helper for pickle.\n",
      " |  \n",
      " |  __reduce_ex__(self, protocol)\n",
      " |      Helper for pickle.\n",
      " |  \n",
      " |  __setstate__(self, state)\n",
      " |  \n",
      " |  as_content_primitive(self, radical=False, clear=True)\n",
      " |      A stub to allow Basic args (like Tuple) to be skipped when computing\n",
      " |      the content and primitive components of an expression.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      sympy.core.expr.Expr.as_content_primitive\n",
      " |  \n",
      " |  as_dummy(self)\n",
      " |      Return the expression with any objects having structurally\n",
      " |      bound symbols replaced with unique, canonical symbols within\n",
      " |      the object in which they appear and having only the default\n",
      " |      assumption for commutativity being True. When applied to a\n",
      " |      symbol a new symbol having only the same commutativity will be\n",
      " |      returned.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Integral, Symbol\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> r = Symbol('r', real=True)\n",
      " |      >>> Integral(r, (r, x)).as_dummy()\n",
      " |      Integral(_0, (_0, x))\n",
      " |      >>> _.variables[0].is_real is None\n",
      " |      True\n",
      " |      >>> r.as_dummy()\n",
      " |      _r\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      Any object that has structurally bound variables should have\n",
      " |      a property, `bound_symbols` that returns those symbols\n",
      " |      appearing in the object.\n",
      " |  \n",
      " |  atoms(self, *types)\n",
      " |      Returns the atoms that form the current object.\n",
      " |      \n",
      " |      By default, only objects that are truly atomic and cannot\n",
      " |      be divided into smaller pieces are returned: symbols, numbers,\n",
      " |      and number symbols like I and pi. It is possible to request\n",
      " |      atoms of any type, however, as demonstrated below.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import I, pi, sin\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms()\n",
      " |      {1, 2, I, pi, x, y}\n",
      " |      \n",
      " |      If one or more types are given, the results will contain only\n",
      " |      those types of atoms.\n",
      " |      \n",
      " |      >>> from sympy import Number, NumberSymbol, Symbol\n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Symbol)\n",
      " |      {x, y}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Number)\n",
      " |      {1, 2}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Number, NumberSymbol)\n",
      " |      {1, 2, pi}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Number, NumberSymbol, I)\n",
      " |      {1, 2, I, pi}\n",
      " |      \n",
      " |      Note that I (imaginary unit) and zoo (complex infinity) are special\n",
      " |      types of number symbols and are not part of the NumberSymbol class.\n",
      " |      \n",
      " |      The type can be given implicitly, too:\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(x) # x is a Symbol\n",
      " |      {x, y}\n",
      " |      \n",
      " |      Be careful to check your assumptions when using the implicit option\n",
      " |      since ``S(1).is_Integer = True`` but ``type(S(1))`` is ``One``, a special type\n",
      " |      of SymPy atom, while ``type(S(2))`` is type ``Integer`` and will find all\n",
      " |      integers in an expression:\n",
      " |      \n",
      " |      >>> from sympy import S\n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(S(1))\n",
      " |      {1}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(S(2))\n",
      " |      {1, 2}\n",
      " |      \n",
      " |      Finally, arguments to atoms() can select more than atomic atoms: any\n",
      " |      SymPy type (loaded in core/__init__.py) can be listed as an argument\n",
      " |      and those types of \"atoms\" as found in scanning the arguments of the\n",
      " |      expression recursively:\n",
      " |      \n",
      " |      >>> from sympy import Function, Mul\n",
      " |      >>> from sympy.core.function import AppliedUndef\n",
      " |      >>> f = Function('f')\n",
      " |      >>> (1 + f(x) + 2*sin(y + I*pi)).atoms(Function)\n",
      " |      {f(x), sin(y + I*pi)}\n",
      " |      >>> (1 + f(x) + 2*sin(y + I*pi)).atoms(AppliedUndef)\n",
      " |      {f(x)}\n",
      " |      \n",
      " |      >>> (1 + x + 2*sin(y + I*pi)).atoms(Mul)\n",
      " |      {I*pi, 2*sin(y + I*pi)}\n",
      " |  \n",
      " |  compare(self, other)\n",
      " |      Return -1, 0, 1 if the object is smaller, equal, or greater than other.\n",
      " |      \n",
      " |      Not in the mathematical sense. If the object is of a different type\n",
      " |      from the \"other\" then their classes are ordered according to\n",
      " |      the sorted_classes list.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> x.compare(y)\n",
      " |      -1\n",
      " |      >>> x.compare(x)\n",
      " |      0\n",
      " |      >>> y.compare(x)\n",
      " |      1\n",
      " |  \n",
      " |  copy(self)\n",
      " |  \n",
      " |  could_extract_minus_sign(self)\n",
      " |  \n",
      " |  count(self, query)\n",
      " |      Count the number of matching subexpressions.\n",
      " |  \n",
      " |  count_ops(self, visual=None)\n",
      " |      Wrapper for count_ops that returns the operation count.\n",
      " |  \n",
      " |  doit(self, **hints)\n",
      " |      Evaluate objects that are not evaluated by default like limits,\n",
      " |      integrals, sums and products. All objects of this kind will be\n",
      " |      evaluated recursively, unless some species were excluded via 'hints'\n",
      " |      or unless the 'deep' hint was set to 'False'.\n",
      " |      \n",
      " |      >>> from sympy import Integral\n",
      " |      >>> from sympy.abc import x\n",
      " |      \n",
      " |      >>> 2*Integral(x, x)\n",
      " |      2*Integral(x, x)\n",
      " |      \n",
      " |      >>> (2*Integral(x, x)).doit()\n",
      " |      x**2\n",
      " |      \n",
      " |      >>> (2*Integral(x, x)).doit(deep=False)\n",
      " |      2*Integral(x, x)\n",
      " |  \n",
      " |  dummy_eq(self, other, symbol=None)\n",
      " |      Compare two expressions and handle dummy symbols.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Dummy\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      \n",
      " |      >>> u = Dummy('u')\n",
      " |      \n",
      " |      >>> (u**2 + 1).dummy_eq(x**2 + 1)\n",
      " |      True\n",
      " |      >>> (u**2 + 1) == (x**2 + 1)\n",
      " |      False\n",
      " |      \n",
      " |      >>> (u**2 + y).dummy_eq(x**2 + y, x)\n",
      " |      True\n",
      " |      >>> (u**2 + y).dummy_eq(x**2 + y, y)\n",
      " |      False\n",
      " |  \n",
      " |  find(self, query, group=False)\n",
      " |      Find all subexpressions matching a query.\n",
      " |  \n",
      " |  has(self, *patterns)\n",
      " |      Test whether any subexpression matches any of the patterns.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import sin\n",
      " |      >>> from sympy.abc import x, y, z\n",
      " |      >>> (x**2 + sin(x*y)).has(z)\n",
      " |      False\n",
      " |      >>> (x**2 + sin(x*y)).has(x, y, z)\n",
      " |      True\n",
      " |      >>> x.has(x)\n",
      " |      True\n",
      " |      \n",
      " |      Note ``has`` is a structural algorithm with no knowledge of\n",
      " |      mathematics. Consider the following half-open interval:\n",
      " |      \n",
      " |      >>> from sympy import Interval\n",
      " |      >>> i = Interval.Lopen(0, 5); i\n",
      " |      Interval.Lopen(0, 5)\n",
      " |      >>> i.args\n",
      " |      (0, 5, True, False)\n",
      " |      >>> i.has(4)  # there is no \"4\" in the arguments\n",
      " |      False\n",
      " |      >>> i.has(0)  # there *is* a \"0\" in the arguments\n",
      " |      True\n",
      " |      \n",
      " |      Instead, use ``contains`` to determine whether a number is in the\n",
      " |      interval or not:\n",
      " |      \n",
      " |      >>> i.contains(4)\n",
      " |      True\n",
      " |      >>> i.contains(0)\n",
      " |      False\n",
      " |      \n",
      " |      \n",
      " |      Note that ``expr.has(*patterns)`` is exactly equivalent to\n",
      " |      ``any(expr.has(p) for p in patterns)``. In particular, ``False`` is\n",
      " |      returned when the list of patterns is empty.\n",
      " |      \n",
      " |      >>> x.has()\n",
      " |      False\n",
      " |  \n",
      " |  has_free(self, *patterns)\n",
      " |      Return True if self has object(s) ``x`` as a free expression\n",
      " |      else False.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Integral, Function\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> f = Function('f')\n",
      " |      >>> g = Function('g')\n",
      " |      >>> expr = Integral(f(x), (f(x), 1, g(y)))\n",
      " |      >>> expr.free_symbols\n",
      " |      {y}\n",
      " |      >>> expr.has_free(g(y))\n",
      " |      True\n",
      " |      >>> expr.has_free(*(x, f(x)))\n",
      " |      False\n",
      " |      \n",
      " |      This works for subexpressions and types, too:\n",
      " |      \n",
      " |      >>> expr.has_free(g)\n",
      " |      True\n",
      " |      >>> (x + y + 1).has_free(y + 1)\n",
      " |      True\n",
      " |  \n",
      " |  has_xfree(self, s: 'set[Basic]')\n",
      " |      Return True if self has any of the patterns in s as a\n",
      " |      free argument, else False. This is like `Basic.has_free`\n",
      " |      but this will only report exact argument matches.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Function\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> f = Function('f')\n",
      " |      >>> f(x).has_xfree({f})\n",
      " |      False\n",
      " |      >>> f(x).has_xfree({f(x)})\n",
      " |      True\n",
      " |      >>> f(x + 1).has_xfree({x})\n",
      " |      True\n",
      " |      >>> f(x + 1).has_xfree({x + 1})\n",
      " |      True\n",
      " |      >>> f(x + y + 1).has_xfree({x + 1})\n",
      " |      False\n",
      " |  \n",
      " |  is_hypergeometric(self, k)\n",
      " |  \n",
      " |  match(self, pattern, old=False)\n",
      " |      Pattern matching.\n",
      " |      \n",
      " |      Wild symbols match all.\n",
      " |      \n",
      " |      Return ``None`` when expression (self) does not match\n",
      " |      with pattern. Otherwise return a dictionary such that::\n",
      " |      \n",
      " |        pattern.xreplace(self.match(pattern)) == self\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Wild, Sum\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> p = Wild(\"p\")\n",
      " |      >>> q = Wild(\"q\")\n",
      " |      >>> r = Wild(\"r\")\n",
      " |      >>> e = (x+y)**(x+y)\n",
      " |      >>> e.match(p**p)\n",
      " |      {p_: x + y}\n",
      " |      >>> e.match(p**q)\n",
      " |      {p_: x + y, q_: x + y}\n",
      " |      >>> e = (2*x)**2\n",
      " |      >>> e.match(p*q**r)\n",
      " |      {p_: 4, q_: x, r_: 2}\n",
      " |      >>> (p*q**r).xreplace(e.match(p*q**r))\n",
      " |      4*x**2\n",
      " |      \n",
      " |      Structurally bound symbols are ignored during matching:\n",
      " |      \n",
      " |      >>> Sum(x, (x, 1, 2)).match(Sum(y, (y, 1, p)))\n",
      " |      {p_: 2}\n",
      " |      \n",
      " |      But they can be identified if desired:\n",
      " |      \n",
      " |      >>> Sum(x, (x, 1, 2)).match(Sum(q, (q, 1, p)))\n",
      " |      {p_: 2, q_: x}\n",
      " |      \n",
      " |      The ``old`` flag will give the old-style pattern matching where\n",
      " |      expressions and patterns are essentially solved to give the\n",
      " |      match. Both of the following give None unless ``old=True``:\n",
      " |      \n",
      " |      >>> (x - 2).match(p - x, old=True)\n",
      " |      {p_: 2*x - 2}\n",
      " |      >>> (2/x).match(p*x, old=True)\n",
      " |      {p_: 2/x**2}\n",
      " |  \n",
      " |  matches(self, expr, repl_dict=None, old=False)\n",
      " |      Helper method for match() that looks for a match between Wild symbols\n",
      " |      in self and expressions in expr.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import symbols, Wild, Basic\n",
      " |      >>> a, b, c = symbols('a b c')\n",
      " |      >>> x = Wild('x')\n",
      " |      >>> Basic(a + x, x).matches(Basic(a + b, c)) is None\n",
      " |      True\n",
      " |      >>> Basic(a + x, x).matches(Basic(a + b + c, b + c))\n",
      " |      {x_: b + c}\n",
      " |  \n",
      " |  rcall(self, *args)\n",
      " |      Apply on the argument recursively through the expression tree.\n",
      " |      \n",
      " |      This method is used to simulate a common abuse of notation for\n",
      " |      operators. For instance, in SymPy the following will not work:\n",
      " |      \n",
      " |      ``(x+Lambda(y, 2*y))(z) == x+2*z``,\n",
      " |      \n",
      " |      however, you can use:\n",
      " |      \n",
      " |      >>> from sympy import Lambda\n",
      " |      >>> from sympy.abc import x, y, z\n",
      " |      >>> (x + Lambda(y, 2*y)).rcall(z)\n",
      " |      x + 2*z\n",
      " |  \n",
      " |  refine(self, assumption=True)\n",
      " |      See the refine function in sympy.assumptions\n",
      " |  \n",
      " |  replace(self, query, value, map=False, simultaneous=True, exact=None)\n",
      " |      Replace matching subexpressions of ``self`` with ``value``.\n",
      " |      \n",
      " |      If ``map = True`` then also return the mapping {old: new} where ``old``\n",
      " |      was a sub-expression found with query and ``new`` is the replacement\n",
      " |      value for it. If the expression itself does not match the query, then\n",
      " |      the returned value will be ``self.xreplace(map)`` otherwise it should\n",
      " |      be ``self.subs(ordered(map.items()))``.\n",
      " |      \n",
      " |      Traverses an expression tree and performs replacement of matching\n",
      " |      subexpressions from the bottom to the top of the tree. The default\n",
      " |      approach is to do the replacement in a simultaneous fashion so\n",
      " |      changes made are targeted only once. If this is not desired or causes\n",
      " |      problems, ``simultaneous`` can be set to False.\n",
      " |      \n",
      " |      In addition, if an expression containing more than one Wild symbol\n",
      " |      is being used to match subexpressions and the ``exact`` flag is None\n",
      " |      it will be set to True so the match will only succeed if all non-zero\n",
      " |      values are received for each Wild that appears in the match pattern.\n",
      " |      Setting this to False accepts a match of 0; while setting it True\n",
      " |      accepts all matches that have a 0 in them. See example below for\n",
      " |      cautions.\n",
      " |      \n",
      " |      The list of possible combinations of queries and replacement values\n",
      " |      is listed below:\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      Initial setup\n",
      " |      \n",
      " |      >>> from sympy import log, sin, cos, tan, Wild, Mul, Add\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> f = log(sin(x)) + tan(sin(x**2))\n",
      " |      \n",
      " |      1.1. type -> type\n",
      " |          obj.replace(type, newtype)\n",
      " |      \n",
      " |          When object of type ``type`` is found, replace it with the\n",
      " |          result of passing its argument(s) to ``newtype``.\n",
      " |      \n",
      " |          >>> f.replace(sin, cos)\n",
      " |          log(cos(x)) + tan(cos(x**2))\n",
      " |          >>> sin(x).replace(sin, cos, map=True)\n",
      " |          (cos(x), {sin(x): cos(x)})\n",
      " |          >>> (x*y).replace(Mul, Add)\n",
      " |          x + y\n",
      " |      \n",
      " |      1.2. type -> func\n",
      " |          obj.replace(type, func)\n",
      " |      \n",
      " |          When object of type ``type`` is found, apply ``func`` to its\n",
      " |          argument(s). ``func`` must be written to handle the number\n",
      " |          of arguments of ``type``.\n",
      " |      \n",
      " |          >>> f.replace(sin, lambda arg: sin(2*arg))\n",
      " |          log(sin(2*x)) + tan(sin(2*x**2))\n",
      " |          >>> (x*y).replace(Mul, lambda *args: sin(2*Mul(*args)))\n",
      " |          sin(2*x*y)\n",
      " |      \n",
      " |      2.1. pattern -> expr\n",
      " |          obj.replace(pattern(wild), expr(wild))\n",
      " |      \n",
      " |          Replace subexpressions matching ``pattern`` with the expression\n",
      " |          written in terms of the Wild symbols in ``pattern``.\n",
      " |      \n",
      " |          >>> a, b = map(Wild, 'ab')\n",
      " |          >>> f.replace(sin(a), tan(a))\n",
      " |          log(tan(x)) + tan(tan(x**2))\n",
      " |          >>> f.replace(sin(a), tan(a/2))\n",
      " |          log(tan(x/2)) + tan(tan(x**2/2))\n",
      " |          >>> f.replace(sin(a), a)\n",
      " |          log(x) + tan(x**2)\n",
      " |          >>> (x*y).replace(a*x, a)\n",
      " |          y\n",
      " |      \n",
      " |          Matching is exact by default when more than one Wild symbol\n",
      " |          is used: matching fails unless the match gives non-zero\n",
      " |          values for all Wild symbols:\n",
      " |      \n",
      " |          >>> (2*x + y).replace(a*x + b, b - a)\n",
      " |          y - 2\n",
      " |          >>> (2*x).replace(a*x + b, b - a)\n",
      " |          2*x\n",
      " |      \n",
      " |          When set to False, the results may be non-intuitive:\n",
      " |      \n",
      " |          >>> (2*x).replace(a*x + b, b - a, exact=False)\n",
      " |          2/x\n",
      " |      \n",
      " |      2.2. pattern -> func\n",
      " |          obj.replace(pattern(wild), lambda wild: expr(wild))\n",
      " |      \n",
      " |          All behavior is the same as in 2.1 but now a function in terms of\n",
      " |          pattern variables is used rather than an expression:\n",
      " |      \n",
      " |          >>> f.replace(sin(a), lambda a: sin(2*a))\n",
      " |          log(sin(2*x)) + tan(sin(2*x**2))\n",
      " |      \n",
      " |      3.1. func -> func\n",
      " |          obj.replace(filter, func)\n",
      " |      \n",
      " |          Replace subexpression ``e`` with ``func(e)`` if ``filter(e)``\n",
      " |          is True.\n",
      " |      \n",
      " |          >>> g = 2*sin(x**3)\n",
      " |          >>> g.replace(lambda expr: expr.is_Number, lambda expr: expr**2)\n",
      " |          4*sin(x**9)\n",
      " |      \n",
      " |      The expression itself is also targeted by the query but is done in\n",
      " |      such a fashion that changes are not made twice.\n",
      " |      \n",
      " |          >>> e = x*(x*y + 1)\n",
      " |          >>> e.replace(lambda x: x.is_Mul, lambda x: 2*x)\n",
      " |          2*x*(2*x*y + 1)\n",
      " |      \n",
      " |      When matching a single symbol, `exact` will default to True, but\n",
      " |      this may or may not be the behavior that is desired:\n",
      " |      \n",
      " |      Here, we want `exact=False`:\n",
      " |      \n",
      " |      >>> from sympy import Function\n",
      " |      >>> f = Function('f')\n",
      " |      >>> e = f(1) + f(0)\n",
      " |      >>> q = f(a), lambda a: f(a + 1)\n",
      " |      >>> e.replace(*q, exact=False)\n",
      " |      f(1) + f(2)\n",
      " |      >>> e.replace(*q, exact=True)\n",
      " |      f(0) + f(2)\n",
      " |      \n",
      " |      But here, the nature of matching makes selecting\n",
      " |      the right setting tricky:\n",
      " |      \n",
      " |      >>> e = x**(1 + y)\n",
      " |      >>> (x**(1 + y)).replace(x**(1 + a), lambda a: x**-a, exact=False)\n",
      " |      x\n",
      " |      >>> (x**(1 + y)).replace(x**(1 + a), lambda a: x**-a, exact=True)\n",
      " |      x**(-x - y + 1)\n",
      " |      >>> (x**y).replace(x**(1 + a), lambda a: x**-a, exact=False)\n",
      " |      x\n",
      " |      >>> (x**y).replace(x**(1 + a), lambda a: x**-a, exact=True)\n",
      " |      x**(1 - y)\n",
      " |      \n",
      " |      It is probably better to use a different form of the query\n",
      " |      that describes the target expression more precisely:\n",
      " |      \n",
      " |      >>> (1 + x**(1 + y)).replace(\n",
      " |      ... lambda x: x.is_Pow and x.exp.is_Add and x.exp.args[0] == 1,\n",
      " |      ... lambda x: x.base**(1 - (x.exp - 1)))\n",
      " |      ...\n",
      " |      x**(1 - y) + 1\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      \n",
      " |      subs: substitution of subexpressions as defined by the objects\n",
      " |            themselves.\n",
      " |      xreplace: exact node replacement in expr tree; also capable of\n",
      " |                using matching rules\n",
      " |  \n",
      " |  rewrite(self, *args, deep=True, **hints)\n",
      " |      Rewrite *self* using a defined rule.\n",
      " |      \n",
      " |      Rewriting transforms an expression to another, which is mathematically\n",
      " |      equivalent but structurally different. For example you can rewrite\n",
      " |      trigonometric functions as complex exponentials or combinatorial\n",
      " |      functions as gamma function.\n",
      " |      \n",
      " |      This method takes a *pattern* and a *rule* as positional arguments.\n",
      " |      *pattern* is optional parameter which defines the types of expressions\n",
      " |      that will be transformed. If it is not passed, all possible expressions\n",
      " |      will be rewritten. *rule* defines how the expression will be rewritten.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      args : Expr\n",
      " |          A *rule*, or *pattern* and *rule*.\n",
      " |          - *pattern* is a type or an iterable of types.\n",
      " |          - *rule* can be any object.\n",
      " |      \n",
      " |      deep : bool, optional\n",
      " |          If ``True``, subexpressions are recursively transformed. Default is\n",
      " |          ``True``.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      If *pattern* is unspecified, all possible expressions are transformed.\n",
      " |      \n",
      " |      >>> from sympy import cos, sin, exp, I\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> expr = cos(x) + I*sin(x)\n",
      " |      >>> expr.rewrite(exp)\n",
      " |      exp(I*x)\n",
      " |      \n",
      " |      Pattern can be a type or an iterable of types.\n",
      " |      \n",
      " |      >>> expr.rewrite(sin, exp)\n",
      " |      exp(I*x)/2 + cos(x) - exp(-I*x)/2\n",
      " |      >>> expr.rewrite([cos,], exp)\n",
      " |      exp(I*x)/2 + I*sin(x) + exp(-I*x)/2\n",
      " |      >>> expr.rewrite([cos, sin], exp)\n",
      " |      exp(I*x)\n",
      " |      \n",
      " |      Rewriting behavior can be implemented by defining ``_eval_rewrite()``\n",
      " |      method.\n",
      " |      \n",
      " |      >>> from sympy import Expr, sqrt, pi\n",
      " |      >>> class MySin(Expr):\n",
      " |      ...     def _eval_rewrite(self, rule, args, **hints):\n",
      " |      ...         x, = args\n",
      " |      ...         if rule == cos:\n",
      " |      ...             return cos(pi/2 - x, evaluate=False)\n",
      " |      ...         if rule == sqrt:\n",
      " |      ...             return sqrt(1 - cos(x)**2)\n",
      " |      >>> MySin(MySin(x)).rewrite(cos)\n",
      " |      cos(-cos(-x + pi/2) + pi/2)\n",
      " |      >>> MySin(x).rewrite(sqrt)\n",
      " |      sqrt(1 - cos(x)**2)\n",
      " |      \n",
      " |      Defining ``_eval_rewrite_as_[...]()`` method is supported for backwards\n",
      " |      compatibility reason. This may be removed in the future and using it is\n",
      " |      discouraged.\n",
      " |      \n",
      " |      >>> class MySin(Expr):\n",
      " |      ...     def _eval_rewrite_as_cos(self, *args, **hints):\n",
      " |      ...         x, = args\n",
      " |      ...         return cos(pi/2 - x, evaluate=False)\n",
      " |      >>> MySin(x).rewrite(cos)\n",
      " |      cos(-x + pi/2)\n",
      " |  \n",
      " |  simplify(self, **kwargs)\n",
      " |      See the simplify function in sympy.simplify\n",
      " |  \n",
      " |  sort_key(self, order=None)\n",
      " |      Return a sort key.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import S, I\n",
      " |      \n",
      " |      >>> sorted([S(1)/2, I, -I], key=lambda x: x.sort_key())\n",
      " |      [1/2, -I, I]\n",
      " |      \n",
      " |      >>> S(\"[x, 1/x, 1/x**2, x**2, x**(1/2), x**(1/4), x**(3/2)]\")\n",
      " |      [x, 1/x, x**(-2), x**2, sqrt(x), x**(1/4), x**(3/2)]\n",
      " |      >>> sorted(_, key=lambda x: x.sort_key())\n",
      " |      [x**(-2), 1/x, x**(1/4), sqrt(x), x, x**(3/2), x**2]\n",
      " |  \n",
      " |  subs(self, *args, **kwargs)\n",
      " |      Substitutes old for new in an expression after sympifying args.\n",
      " |      \n",
      " |      `args` is either:\n",
      " |        - two arguments, e.g. foo.subs(old, new)\n",
      " |        - one iterable argument, e.g. foo.subs(iterable). The iterable may be\n",
      " |           o an iterable container with (old, new) pairs. In this case the\n",
      " |             replacements are processed in the order given with successive\n",
      " |             patterns possibly affecting replacements already made.\n",
      " |           o a dict or set whose key/value items correspond to old/new pairs.\n",
      " |             In this case the old/new pairs will be sorted by op count and in\n",
      " |             case of a tie, by number of args and the default_sort_key. The\n",
      " |             resulting sorted list is then processed as an iterable container\n",
      " |             (see previous).\n",
      " |      \n",
      " |      If the keyword ``simultaneous`` is True, the subexpressions will not be\n",
      " |      evaluated until all the substitutions have been made.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import pi, exp, limit, oo\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      >>> (1 + x*y).subs(x, pi)\n",
      " |      pi*y + 1\n",
      " |      >>> (1 + x*y).subs({x:pi, y:2})\n",
      " |      1 + 2*pi\n",
      " |      >>> (1 + x*y).subs([(x, pi), (y, 2)])\n",
      " |      1 + 2*pi\n",
      " |      >>> reps = [(y, x**2), (x, 2)]\n",
      " |      >>> (x + y).subs(reps)\n",
      " |      6\n",
      " |      >>> (x + y).subs(reversed(reps))\n",
      " |      x**2 + 2\n",
      " |      \n",
      " |      >>> (x**2 + x**4).subs(x**2, y)\n",
      " |      y**2 + y\n",
      " |      \n",
      " |      To replace only the x**2 but not the x**4, use xreplace:\n",
      " |      \n",
      " |      >>> (x**2 + x**4).xreplace({x**2: y})\n",
      " |      x**4 + y\n",
      " |      \n",
      " |      To delay evaluation until all substitutions have been made,\n",
      " |      set the keyword ``simultaneous`` to True:\n",
      " |      \n",
      " |      >>> (x/y).subs([(x, 0), (y, 0)])\n",
      " |      0\n",
      " |      >>> (x/y).subs([(x, 0), (y, 0)], simultaneous=True)\n",
      " |      nan\n",
      " |      \n",
      " |      This has the added feature of not allowing subsequent substitutions\n",
      " |      to affect those already made:\n",
      " |      \n",
      " |      >>> ((x + y)/y).subs({x + y: y, y: x + y})\n",
      " |      1\n",
      " |      >>> ((x + y)/y).subs({x + y: y, y: x + y}, simultaneous=True)\n",
      " |      y/(x + y)\n",
      " |      \n",
      " |      In order to obtain a canonical result, unordered iterables are\n",
      " |      sorted by count_op length, number of arguments and by the\n",
      " |      default_sort_key to break any ties. All other iterables are left\n",
      " |      unsorted.\n",
      " |      \n",
      " |      >>> from sympy import sqrt, sin, cos\n",
      " |      >>> from sympy.abc import a, b, c, d, e\n",
      " |      \n",
      " |      >>> A = (sqrt(sin(2*x)), a)\n",
      " |      >>> B = (sin(2*x), b)\n",
      " |      >>> C = (cos(2*x), c)\n",
      " |      >>> D = (x, d)\n",
      " |      >>> E = (exp(x), e)\n",
      " |      \n",
      " |      >>> expr = sqrt(sin(2*x))*sin(exp(x)*x)*cos(2*x) + sin(2*x)\n",
      " |      \n",
      " |      >>> expr.subs(dict([A, B, C, D, E]))\n",
      " |      a*c*sin(d*e) + b\n",
      " |      \n",
      " |      The resulting expression represents a literal replacement of the\n",
      " |      old arguments with the new arguments. This may not reflect the\n",
      " |      limiting behavior of the expression:\n",
      " |      \n",
      " |      >>> (x**3 - 3*x).subs({x: oo})\n",
      " |      nan\n",
      " |      \n",
      " |      >>> limit(x**3 - 3*x, x, oo)\n",
      " |      oo\n",
      " |      \n",
      " |      If the substitution will be followed by numerical\n",
      " |      evaluation, it is better to pass the substitution to\n",
      " |      evalf as\n",
      " |      \n",
      " |      >>> (1/x).evalf(subs={x: 3.0}, n=21)\n",
      " |      0.333333333333333333333\n",
      " |      \n",
      " |      rather than\n",
      " |      \n",
      " |      >>> (1/x).subs({x: 3.0}).evalf(21)\n",
      " |      0.333333333333333314830\n",
      " |      \n",
      " |      as the former will ensure that the desired level of precision is\n",
      " |      obtained.\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      replace: replacement capable of doing wildcard-like matching,\n",
      " |               parsing of match, and conditional replacements\n",
      " |      xreplace: exact node replacement in expr tree; also capable of\n",
      " |                using matching rules\n",
      " |      sympy.core.evalf.EvalfMixin.evalf: calculates the given formula to a desired level of precision\n",
      " |  \n",
      " |  xreplace(self, rule)\n",
      " |      Replace occurrences of objects within the expression.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      rule : dict-like\n",
      " |          Expresses a replacement rule\n",
      " |      \n",
      " |      Returns\n",
      " |      =======\n",
      " |      \n",
      " |      xreplace : the result of the replacement\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import symbols, pi, exp\n",
      " |      >>> x, y, z = symbols('x y z')\n",
      " |      >>> (1 + x*y).xreplace({x: pi})\n",
      " |      pi*y + 1\n",
      " |      >>> (1 + x*y).xreplace({x: pi, y: 2})\n",
      " |      1 + 2*pi\n",
      " |      \n",
      " |      Replacements occur only if an entire node in the expression tree is\n",
      " |      matched:\n",
      " |      \n",
      " |      >>> (x*y + z).xreplace({x*y: pi})\n",
      " |      z + pi\n",
      " |      >>> (x*y*z).xreplace({x*y: pi})\n",
      " |      x*y*z\n",
      " |      >>> (2*x).xreplace({2*x: y, x: z})\n",
      " |      y\n",
      " |      >>> (2*2*x).xreplace({2*x: y, x: z})\n",
      " |      4*z\n",
      " |      >>> (x + y + 2).xreplace({x + y: 2})\n",
      " |      x + y + 2\n",
      " |      >>> (x + 2 + exp(x + 2)).xreplace({x + 2: y})\n",
      " |      x + exp(y) + 2\n",
      " |      \n",
      " |      xreplace does not differentiate between free and bound symbols. In the\n",
      " |      following, subs(x, y) would not change x since it is a bound symbol,\n",
      " |      but xreplace does:\n",
      " |      \n",
      " |      >>> from sympy import Integral\n",
      " |      >>> Integral(x, (x, 1, 2*x)).xreplace({x: y})\n",
      " |      Integral(y, (y, 1, 2*y))\n",
      " |      \n",
      " |      Trying to replace x with an expression raises an error:\n",
      " |      \n",
      " |      >>> Integral(x, (x, 1, 2*x)).xreplace({x: 2*y}) # doctest: +SKIP\n",
      " |      ValueError: Invalid limits given: ((2*y, 1, 4*y),)\n",
      " |      \n",
      " |      See Also\n",
      " |      ========\n",
      " |      replace: replacement capable of doing wildcard-like matching,\n",
      " |               parsing of match, and conditional replacements\n",
      " |      subs: substitution of subexpressions as defined by the objects\n",
      " |            themselves.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Class methods inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  __init_subclass__() from builtins.type\n",
      " |      This method is called when a class is subclassed.\n",
      " |      \n",
      " |      The default implementation does nothing. It may be\n",
      " |      overridden to extend subclasses.\n",
      " |  \n",
      " |  class_key() from builtins.type\n",
      " |      Nice order of classes.\n",
      " |  \n",
      " |  fromiter(args, **assumptions) from builtins.type\n",
      " |      Create a new object from an iterable.\n",
      " |      \n",
      " |      This is a convenience function that allows one to create objects from\n",
      " |      any iterable, without having to convert to a list or tuple first.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Tuple\n",
      " |      >>> Tuple.fromiter(i for i in range(5))\n",
      " |      (0, 1, 2, 3, 4)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  __sympy__\n",
      " |  \n",
      " |  args\n",
      " |      Returns a tuple of arguments of 'self'.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import cot\n",
      " |      >>> from sympy.abc import x, y\n",
      " |      \n",
      " |      >>> cot(x).args\n",
      " |      (x,)\n",
      " |      \n",
      " |      >>> cot(x).args[0]\n",
      " |      x\n",
      " |      \n",
      " |      >>> (x*y).args\n",
      " |      (x, y)\n",
      " |      \n",
      " |      >>> (x*y).args[1]\n",
      " |      y\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      Never use self._args, always use self.args.\n",
      " |      Only use _args in __new__ when creating a new function.\n",
      " |      Do not override .args() from Basic (so that it is easy to\n",
      " |      change the interface in the future if needed).\n",
      " |  \n",
      " |  assumptions0\n",
      " |      Return object `type` assumptions.\n",
      " |      \n",
      " |      For example:\n",
      " |      \n",
      " |        Symbol('x', real=True)\n",
      " |        Symbol('x', integer=True)\n",
      " |      \n",
      " |      are different objects. In other words, besides Python type (Symbol in\n",
      " |      this case), the initial assumptions are also forming their typeinfo.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Symbol\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> x.assumptions0\n",
      " |      {'commutative': True}\n",
      " |      >>> x = Symbol(\"x\", positive=True)\n",
      " |      >>> x.assumptions0\n",
      " |      {'commutative': True, 'complex': True, 'extended_negative': False,\n",
      " |       'extended_nonnegative': True, 'extended_nonpositive': False,\n",
      " |       'extended_nonzero': True, 'extended_positive': True, 'extended_real':\n",
      " |       True, 'finite': True, 'hermitian': True, 'imaginary': False,\n",
      " |       'infinite': False, 'negative': False, 'nonnegative': True,\n",
      " |       'nonpositive': False, 'nonzero': True, 'positive': True, 'real':\n",
      " |       True, 'zero': False}\n",
      " |  \n",
      " |  canonical_variables\n",
      " |      Return a dictionary mapping any variable defined in\n",
      " |      ``self.bound_symbols`` to Symbols that do not clash\n",
      " |      with any free symbols in the expression.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import Lambda\n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> Lambda(x, 2*x).canonical_variables\n",
      " |      {x: _0}\n",
      " |  \n",
      " |  expr_free_symbols\n",
      " |  \n",
      " |  free_symbols\n",
      " |      Return from the atoms of self those which are free symbols.\n",
      " |      \n",
      " |      Not all free symbols are ``Symbol``. Eg: IndexedBase('I')[0].free_symbols\n",
      " |      \n",
      " |      For most expressions, all symbols are free symbols. For some classes\n",
      " |      this is not true. e.g. Integrals use Symbols for the dummy variables\n",
      " |      which are bound variables, so Integral has a method to return all\n",
      " |      symbols except those. Derivative keeps track of symbols with respect\n",
      " |      to which it will perform a derivative; those are\n",
      " |      bound variables, too, so it has its own free_symbols method.\n",
      " |      \n",
      " |      Any other method that uses bound variables should implement a\n",
      " |      free_symbols method.\n",
      " |  \n",
      " |  func\n",
      " |      The top-level function in an expression.\n",
      " |      \n",
      " |      The following should hold for all objects::\n",
      " |      \n",
      " |          >> x == x.func(*x.args)\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy.abc import x\n",
      " |      >>> a = 2*x\n",
      " |      >>> a.func\n",
      " |      <class 'sympy.core.mul.Mul'>\n",
      " |      >>> a.args\n",
      " |      (2, x)\n",
      " |      >>> a.func(*a.args)\n",
      " |      2*x\n",
      " |      >>> a == a.func(*a.args)\n",
      " |      True\n",
      " |  \n",
      " |  is_algebraic\n",
      " |  \n",
      " |  is_antihermitian\n",
      " |  \n",
      " |  is_commutative\n",
      " |  \n",
      " |  is_comparable\n",
      " |      Return True if self can be computed to a real number\n",
      " |      (or already is a real number) with precision, else False.\n",
      " |      \n",
      " |      Examples\n",
      " |      ========\n",
      " |      \n",
      " |      >>> from sympy import exp_polar, pi, I\n",
      " |      >>> (I*exp_polar(I*pi/2)).is_comparable\n",
      " |      True\n",
      " |      >>> (I*exp_polar(I*pi*2)).is_comparable\n",
      " |      False\n",
      " |      \n",
      " |      A False result does not mean that `self` cannot be rewritten\n",
      " |      into a form that would be comparable. For example, the\n",
      " |      difference computed below is zero but without simplification\n",
      " |      it does not evaluate to a zero with precision:\n",
      " |      \n",
      " |      >>> e = 2**pi*(1 + 2**pi)\n",
      " |      >>> dif = e - e.expand()\n",
      " |      >>> dif.is_comparable\n",
      " |      False\n",
      " |      >>> dif.n(2)._prec\n",
      " |      1\n",
      " |  \n",
      " |  is_complex\n",
      " |  \n",
      " |  is_composite\n",
      " |  \n",
      " |  is_even\n",
      " |  \n",
      " |  is_extended_negative\n",
      " |  \n",
      " |  is_extended_nonnegative\n",
      " |  \n",
      " |  is_extended_nonpositive\n",
      " |  \n",
      " |  is_extended_nonzero\n",
      " |  \n",
      " |  is_extended_positive\n",
      " |  \n",
      " |  is_extended_real\n",
      " |  \n",
      " |  is_finite\n",
      " |  \n",
      " |  is_hermitian\n",
      " |  \n",
      " |  is_imaginary\n",
      " |  \n",
      " |  is_infinite\n",
      " |  \n",
      " |  is_integer\n",
      " |  \n",
      " |  is_irrational\n",
      " |  \n",
      " |  is_negative\n",
      " |  \n",
      " |  is_noninteger\n",
      " |  \n",
      " |  is_nonnegative\n",
      " |  \n",
      " |  is_nonpositive\n",
      " |  \n",
      " |  is_nonzero\n",
      " |  \n",
      " |  is_odd\n",
      " |  \n",
      " |  is_polar\n",
      " |  \n",
      " |  is_positive\n",
      " |  \n",
      " |  is_prime\n",
      " |  \n",
      " |  is_rational\n",
      " |  \n",
      " |  is_real\n",
      " |  \n",
      " |  is_transcendental\n",
      " |  \n",
      " |  is_zero\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes inherited from sympy.core.basic.Basic:\n",
      " |  \n",
      " |  is_Add = False\n",
      " |  \n",
      " |  is_AlgebraicNumber = False\n",
      " |  \n",
      " |  is_Atom = False\n",
      " |  \n",
      " |  is_Boolean = False\n",
      " |  \n",
      " |  is_Derivative = False\n",
      " |  \n",
      " |  is_Dummy = False\n",
      " |  \n",
      " |  is_Equality = False\n",
      " |  \n",
      " |  is_Float = False\n",
      " |  \n",
      " |  is_Function = False\n",
      " |  \n",
      " |  is_Indexed = False\n",
      " |  \n",
      " |  is_Integer = False\n",
      " |  \n",
      " |  is_MatAdd = False\n",
      " |  \n",
      " |  is_MatMul = False\n",
      " |  \n",
      " |  is_Matrix = False\n",
      " |  \n",
      " |  is_Mul = False\n",
      " |  \n",
      " |  is_Not = False\n",
      " |  \n",
      " |  is_Number = False\n",
      " |  \n",
      " |  is_NumberSymbol = False\n",
      " |  \n",
      " |  is_Order = False\n",
      " |  \n",
      " |  is_Piecewise = False\n",
      " |  \n",
      " |  is_Point = False\n",
      " |  \n",
      " |  is_Poly = False\n",
      " |  \n",
      " |  is_Pow = False\n",
      " |  \n",
      " |  is_Rational = False\n",
      " |  \n",
      " |  is_Relational = False\n",
      " |  \n",
      " |  is_Symbol = False\n",
      " |  \n",
      " |  is_Vector = False\n",
      " |  \n",
      " |  is_Wild = False\n",
      " |  \n",
      " |  is_symbol = False\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sympy.core.evalf.EvalfMixin:\n",
      " |  \n",
      " |  evalf(self, n=15, subs=None, maxn=100, chop=False, strict=False, quad=None, verbose=False)\n",
      " |      Evaluate the given formula to an accuracy of *n* digits.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ==========\n",
      " |      \n",
      " |      subs : dict, optional\n",
      " |          Substitute numerical values for symbols, e.g.\n",
      " |          ``subs={x:3, y:1+pi}``. The substitutions must be given as a\n",
      " |          dictionary.\n",
      " |      \n",
      " |      maxn : int, optional\n",
      " |          Allow a maximum temporary working precision of maxn digits.\n",
      " |      \n",
      " |      chop : bool or number, optional\n",
      " |          Specifies how to replace tiny real or imaginary parts in\n",
      " |          subresults by exact zeros.\n",
      " |      \n",
      " |          When ``True`` the chop value defaults to standard precision.\n",
      " |      \n",
      " |          Otherwise the chop value is used to determine the\n",
      " |          magnitude of \"small\" for purposes of chopping.\n",
      " |      \n",
      " |          >>> from sympy import N\n",
      " |          >>> x = 1e-4\n",
      " |          >>> N(x, chop=True)\n",
      " |          0.000100000000000000\n",
      " |          >>> N(x, chop=1e-5)\n",
      " |          0.000100000000000000\n",
      " |          >>> N(x, chop=1e-4)\n",
      " |          0\n",
      " |      \n",
      " |      strict : bool, optional\n",
      " |          Raise ``PrecisionExhausted`` if any subresult fails to\n",
      " |          evaluate to full accuracy, given the available maxprec.\n",
      " |      \n",
      " |      quad : str, optional\n",
      " |          Choose algorithm for numerical quadrature. By default,\n",
      " |          tanh-sinh quadrature is used. For oscillatory\n",
      " |          integrals on an infinite interval, try ``quad='osc'``.\n",
      " |      \n",
      " |      verbose : bool, optional\n",
      " |          Print debug information.\n",
      " |      \n",
      " |      Notes\n",
      " |      =====\n",
      " |      \n",
      " |      When Floats are naively substituted into an expression,\n",
      " |      precision errors may adversely affect the result. For example,\n",
      " |      adding 1e16 (a Float) to 1 will truncate to 1e16; if 1e16 is\n",
      " |      then subtracted, the result will be 0.\n",
      " |      That is exactly what happens in the following:\n",
      " |      \n",
      " |      >>> from sympy.abc import x, y, z\n",
      " |      >>> values = {x: 1e16, y: 1, z: 1e16}\n",
      " |      >>> (x + y - z).subs(values)\n",
      " |      0\n",
      " |      \n",
      " |      Using the subs argument for evalf is the accurate way to\n",
      " |      evaluate such an expression:\n",
      " |      \n",
      " |      >>> (x + y - z).evalf(subs=values)\n",
      " |      1.00000000000000\n",
      " |  \n",
      " |  n = evalf(self, n=15, subs=None, maxn=100, chop=False, strict=False, quad=None, verbose=False)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(Hyperbola)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "a,b=symbols(\"a,b\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "hyper=Hyperbola(Point(0,0),a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 - \\frac{y^{2}}{b^{2}} + \\frac{x^{2}}{a^{2}}$"
      ],
      "text/plain": [
       "-1 - y**2/b**2 + x**2/a**2"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [],
   "source": [
    "F1,F2=hyper.foci"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(- \\sqrt{a^{2} + b^{2}}, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(-sqrt(a**2 + b**2), 0)"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\sqrt{a^{2} + b^{2}}, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(sqrt(a**2 + b**2), 0)"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=Point(a,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(a, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(a, 0)"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['__add__',\n",
       " '__and__',\n",
       " '__annotations__',\n",
       " '__class__',\n",
       " '__cmp__',\n",
       " '__contains__',\n",
       " '__delattr__',\n",
       " '__dict__',\n",
       " '__dir__',\n",
       " '__doc__',\n",
       " '__eq__',\n",
       " '__format__',\n",
       " '__ge__',\n",
       " '__getattribute__',\n",
       " '__getnewargs__',\n",
       " '__getstate__',\n",
       " '__gt__',\n",
       " '__hash__',\n",
       " '__init__',\n",
       " '__init_subclass__',\n",
       " '__le__',\n",
       " '__lt__',\n",
       " '__module__',\n",
       " '__mul__',\n",
       " '__ne__',\n",
       " '__new__',\n",
       " '__or__',\n",
       " '__pow__',\n",
       " '__radd__',\n",
       " '__reduce__',\n",
       " '__reduce_ex__',\n",
       " '__repr__',\n",
       " '__rmul__',\n",
       " '__rsub__',\n",
       " '__rtruediv__',\n",
       " '__setattr__',\n",
       " '__setstate__',\n",
       " '__sizeof__',\n",
       " '__slots__',\n",
       " '__str__',\n",
       " '__sub__',\n",
       " '__subclasshook__',\n",
       " '__sympy__',\n",
       " '__weakref__',\n",
       " '__xor__',\n",
       " '_args',\n",
       " '_assumptions',\n",
       " '_boundary',\n",
       " '_compare_pretty',\n",
       " '_complement',\n",
       " '_constructor_postprocessor_mapping',\n",
       " '_contains',\n",
       " '_do_eq_sympify',\n",
       " '_eval_derivative_n_times',\n",
       " '_eval_evalf',\n",
       " '_eval_is_subset',\n",
       " '_eval_is_superset',\n",
       " '_eval_powerset',\n",
       " '_eval_rewrite',\n",
       " '_eval_subs',\n",
       " '_evalf',\n",
       " '_exec_constructor_postprocessors',\n",
       " '_explicit_class_assumptions',\n",
       " '_has',\n",
       " '_hashable_content',\n",
       " '_inf',\n",
       " '_infimum_key',\n",
       " '_kind',\n",
       " '_measure',\n",
       " '_mhash',\n",
       " '_prop_handler',\n",
       " '_recursive_call',\n",
       " '_repr_disabled',\n",
       " '_repr_latex_',\n",
       " '_repr_png_',\n",
       " '_repr_svg_',\n",
       " '_rewrite',\n",
       " '_sage_',\n",
       " '_sorted_args',\n",
       " '_subs',\n",
       " '_sup',\n",
       " '_svg',\n",
       " '_symmetric_difference',\n",
       " '_sympy_',\n",
       " '_to_mpmath',\n",
       " '_xreplace',\n",
       " 'ambient_dimension',\n",
       " 'apoapsis',\n",
       " 'arbitrary_point',\n",
       " 'args',\n",
       " 'as_content_primitive',\n",
       " 'as_dummy',\n",
       " 'assumptions0',\n",
       " 'asymptote',\n",
       " 'atoms',\n",
       " 'boundary',\n",
       " 'bounds',\n",
       " 'canonical_variables',\n",
       " 'center',\n",
       " 'class_key',\n",
       " 'closure',\n",
       " 'compare',\n",
       " 'complement',\n",
       " 'contains',\n",
       " 'copy',\n",
       " 'could_extract_minus_sign',\n",
       " 'count',\n",
       " 'count_ops',\n",
       " 'default_assumptions',\n",
       " 'doit',\n",
       " 'dummy_eq',\n",
       " 'eccentricity',\n",
       " 'encloses',\n",
       " 'encloses_point',\n",
       " 'equals',\n",
       " 'equation',\n",
       " 'evalf',\n",
       " 'evolute',\n",
       " 'expr_free_symbols',\n",
       " 'find',\n",
       " 'foci',\n",
       " 'focus_distance',\n",
       " 'free_symbols',\n",
       " 'fromiter',\n",
       " 'func',\n",
       " 'has',\n",
       " 'has_free',\n",
       " 'has_xfree',\n",
       " 'imaginary',\n",
       " 'inf',\n",
       " 'interior',\n",
       " 'intersect',\n",
       " 'intersection',\n",
       " 'is_Add',\n",
       " 'is_AlgebraicNumber',\n",
       " 'is_Atom',\n",
       " 'is_Boolean',\n",
       " 'is_Complement',\n",
       " 'is_ComplexRegion',\n",
       " 'is_Derivative',\n",
       " 'is_Dummy',\n",
       " 'is_EmptySet',\n",
       " 'is_Equality',\n",
       " 'is_FiniteSet',\n",
       " 'is_Float',\n",
       " 'is_Function',\n",
       " 'is_Indexed',\n",
       " 'is_Integer',\n",
       " 'is_Intersection',\n",
       " 'is_Interval',\n",
       " 'is_MatAdd',\n",
       " 'is_MatMul',\n",
       " 'is_Matrix',\n",
       " 'is_Mul',\n",
       " 'is_Not',\n",
       " 'is_Number',\n",
       " 'is_NumberSymbol',\n",
       " 'is_Order',\n",
       " 'is_Piecewise',\n",
       " 'is_Point',\n",
       " 'is_Poly',\n",
       " 'is_Pow',\n",
       " 'is_ProductSet',\n",
       " 'is_Rational',\n",
       " 'is_Relational',\n",
       " 'is_Symbol',\n",
       " 'is_Union',\n",
       " 'is_UniversalSet',\n",
       " 'is_Vector',\n",
       " 'is_Wild',\n",
       " 'is_algebraic',\n",
       " 'is_antihermitian',\n",
       " 'is_closed',\n",
       " 'is_commutative',\n",
       " 'is_comparable',\n",
       " 'is_complex',\n",
       " 'is_composite',\n",
       " 'is_disjoint',\n",
       " 'is_empty',\n",
       " 'is_even',\n",
       " 'is_extended_negative',\n",
       " 'is_extended_nonnegative',\n",
       " 'is_extended_nonpositive',\n",
       " 'is_extended_nonzero',\n",
       " 'is_extended_positive',\n",
       " 'is_extended_real',\n",
       " 'is_finite',\n",
       " 'is_finite_set',\n",
       " 'is_hermitian',\n",
       " 'is_hypergeometric',\n",
       " 'is_imaginary',\n",
       " 'is_infinite',\n",
       " 'is_integer',\n",
       " 'is_interval',\n",
       " 'is_irrational',\n",
       " 'is_iterable',\n",
       " 'is_negative',\n",
       " 'is_noninteger',\n",
       " 'is_nonnegative',\n",
       " 'is_nonpositive',\n",
       " 'is_nonzero',\n",
       " 'is_number',\n",
       " 'is_odd',\n",
       " 'is_open',\n",
       " 'is_polar',\n",
       " 'is_positive',\n",
       " 'is_prime',\n",
       " 'is_proper_subset',\n",
       " 'is_proper_superset',\n",
       " 'is_rational',\n",
       " 'is_real',\n",
       " 'is_similar',\n",
       " 'is_subset',\n",
       " 'is_superset',\n",
       " 'is_symbol',\n",
       " 'is_tangent',\n",
       " 'is_transcendental',\n",
       " 'is_zero',\n",
       " 'isdisjoint',\n",
       " 'issubset',\n",
       " 'issuperset',\n",
       " 'kind',\n",
       " 'match',\n",
       " 'matches',\n",
       " 'measure',\n",
       " 'n',\n",
       " 'normal_lines',\n",
       " 'parameter_value',\n",
       " 'periapsis',\n",
       " 'plot_interval',\n",
       " 'polar_second_moment_of_area',\n",
       " 'powerset',\n",
       " 'random_point',\n",
       " 'rcall',\n",
       " 'real',\n",
       " 'refine',\n",
       " 'reflect',\n",
       " 'replace',\n",
       " 'rewrite',\n",
       " 'rotate',\n",
       " 'scale',\n",
       " 'second_moment_of_area',\n",
       " 'section_modulus',\n",
       " 'semilatus_rectum',\n",
       " 'simplify',\n",
       " 'slope',\n",
       " 'sort_key',\n",
       " 'subs',\n",
       " 'sup',\n",
       " 'symmetric_difference',\n",
       " 'tangent_lines',\n",
       " 'translate',\n",
       " 'union',\n",
       " 'xreplace']"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dir(hyper)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [],
   "source": [
    "line1,line2=hyper.asymptote"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(0, 0\\right), \\operatorname{Point2D}\\left(- a, b\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(0, 0), Point2D(-a, b))"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "line1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(0, 0\\right), \\operatorname{Point2D}\\left(a, b\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(0, 0), Point2D(a, b))"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "line2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{a^{2} + b^{2}}$"
      ],
      "text/plain": [
       "sqrt(a**2 + b**2)"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.focus_distance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Circle(Point(0,0),_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Circle}\\left(\\operatorname{Point2D}\\left(0, 0\\right), \\sqrt{a^{2} + b^{2}}\\right)$"
      ],
      "text/plain": [
       "Circle(Point2D(0, 0), sqrt(a**2 + b**2))"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "P,Q=Intersection(line1,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(- a, b\\right)$"
      ],
      "text/plain": [
       "Point2D(-a, b)"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(a, - b\\right)$"
      ],
      "text/plain": [
       "Point2D(a, -b)"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Q\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [],
   "source": [
    "angle=Ray(A,P).angle_between(Ray(A,Q))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{acos}{\\left(- \\frac{b}{\\sqrt{4 a^{2} + b^{2}}} \\right)}$"
      ],
      "text/plain": [
       "acos(-b/sqrt(4*a**2 + b**2))"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "angle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(angle,3*pi/4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{acos}{\\left(- \\frac{b}{\\sqrt{4 a^{2} + b^{2}}} \\right)} = \\frac{3 \\pi}{4}$"
      ],
      "text/plain": [
       "Eq(acos(-b/sqrt(4*a**2 + b**2)), 3*pi/4)"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{2 a\\right\\}$"
      ],
      "text/plain": [
       "{2*a}"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=cos(angle)-cos(3*pi/4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{b}{\\sqrt{4 a^{2} + b^{2}}} + \\frac{\\sqrt{2}}{2}$"
      ],
      "text/plain": [
       "-b/sqrt(4*a**2 + b**2) + sqrt(2)/2"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{2 a\\right\\}$"
      ],
      "text/plain": [
       "{2*a}"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{5}$"
      ],
      "text/plain": [
       "sqrt(5)"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.eccentricity.subs(b,2*a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 7. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=1/(exp(x)+1)-1/S(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{1}{2} + \\frac{1}{e^{x} + 1}$"
      ],
      "text/plain": [
       "-1/2 + 1/(exp(x) + 1)"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_is_odd(expr,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{e^{x} - 1}{2 \\left(e^{x} + 1\\right)}$"
      ],
      "text/plain": [
       "-(exp(x) - 1)/(2*(exp(x) + 1))"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(cancel(expr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [],
   "source": [
    "t=symbols(\"t\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_h=expr.subs(x,y)-2*y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 y - \\frac{1}{2} + \\frac{1}{e^{y} + 1}$"
      ],
      "text/plain": [
       "-2*y - 1/2 + 1/(exp(y) + 1)"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_h"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x11f894710>"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr_h,(y,-3,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\left(e^{y} + 2\\right) \\left(2 e^{y} + 1\\right)}{\\left(e^{y} + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "-(exp(y) + 2)*(2*exp(y) + 1)/(exp(y) + 1)**2"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_h,y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(0, 1\\right)$"
      ],
      "text/plain": [
       "Interval.open(0, 1)"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(ln(t)<0,t,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 8. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [],
   "source": [
    "k,b=symbols(\"k,b\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(y-k*x-b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - b - k x + y$"
      ],
      "text/plain": [
       "-b - k*x + y"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [],
   "source": [
    "p=symbols(\"p\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [],
   "source": [
    "para=Parabola(Point(p/2,0),Line(x+p/2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 p x - y^{2}$"
      ],
      "text/plain": [
       "2*p*x - y**2"
      ]
     },
     "execution_count": 148,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "para.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B=Intersection(para,l)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{- b + \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}}{k}, \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}\\right)$"
      ],
      "text/plain": [
       "Point2D((-b + sqrt(p)*sqrt(-2*b*k + p)/k + p/k)/k, sqrt(p)*sqrt(-2*b*k + p)/k + p/k)"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{- b - \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}}{k}, - \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}\\right)$"
      ],
      "text/plain": [
       "Point2D((-b - sqrt(p)*sqrt(-2*b*k + p)/k + p/k)/k, -sqrt(p)*sqrt(-2*b*k + p)/k + p/k)"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [],
   "source": [
    "F=para.focus"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{p}{2}, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(p/2, 0)"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [],
   "source": [
    "x1,y1=A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {},
   "outputs": [],
   "source": [
    "x2,y2=B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\left(- b - \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}\\right) \\left(- b + \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}\\right)}{k^{2}}$"
      ],
      "text/plain": [
       "(-b - sqrt(p)*sqrt(-2*b*k + p)/k + p/k)*(-b + sqrt(p)*sqrt(-2*b*k + p)/k + p/k)/k**2"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1*x2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{b^{2}}{k^{2}}$"
      ],
      "text/plain": [
       "b**2/k**2"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{- b k + p}{k^{2}}, \\frac{p}{k}\\right)$"
      ],
      "text/plain": [
       "Point2D((-b*k + p)/k**2, p/k)"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(A+B)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [],
   "source": [
    "x3,y3=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 266,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=Eq(x3,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 267,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{- b k + p}{k^{2}} = x$"
      ],
      "text/plain": [
       "Eq((-b*k + p)/k**2, x)"
      ]
     },
     "execution_count": 267,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 268,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- \\frac{k^{2} x - p}{k}\\right\\}$"
      ],
      "text/plain": [
       "{-(k**2*x - p)/k}"
      ]
     },
     "execution_count": 268,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq1,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 269,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=Eq(y3,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 270,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{p}{k} = y$"
      ],
      "text/plain": [
       "Eq(p/k, y)"
      ]
     },
     "execution_count": 270,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 271,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\emptyset$"
      ],
      "text/plain": [
       "EmptySet"
      ]
     },
     "execution_count": 271,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq2,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{b}{k} + \\frac{p}{k^{2}}$"
      ],
      "text/plain": [
       "-b/k + p/k**2"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(x3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{p}{k}$"
      ],
      "text/plain": [
       "p/k"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(k*x3+b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{b}{k} + \\frac{p}{k^{2}}$"
      ],
      "text/plain": [
       "-b/k + p/k**2"
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand((y3-b)/k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [],
   "source": [
    "O=Point(0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{- b k + \\sqrt{p} \\sqrt{- 2 b k + p} + p}{k \\left(\\sqrt{p} \\sqrt{- 2 b k + p} + p\\right)} + \\frac{b k + \\sqrt{p} \\sqrt{- 2 b k + p} - p}{k \\left(\\sqrt{p} \\sqrt{- 2 b k + p} - p\\right)}$"
      ],
      "text/plain": [
       "(-b*k + sqrt(p)*sqrt(-2*b*k + p) + p)/(k*(sqrt(p)*sqrt(-2*b*k + p) + p)) + (b*k + sqrt(p)*sqrt(-2*b*k + p) - p)/(k*(sqrt(p)*sqrt(-2*b*k + p) - p))"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1/Line(O,A).slope+1/Line(O,B).slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{k}$"
      ],
      "text/plain": [
       "1/k"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{\\left(- \\frac{p}{2} + \\frac{- b + \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}}{k}\\right)^{2} + \\left(\\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}\\right)^{2}}}{\\sqrt{\\left(- \\frac{p}{2} + \\frac{- b - \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}}{k}\\right)^{2} + \\left(- \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}\\right)^{2}}}$"
      ],
      "text/plain": [
       "sqrt((-p/2 + (-b + sqrt(p)*sqrt(-2*b*k + p)/k + p/k)/k)**2 + (sqrt(p)*sqrt(-2*b*k + p)/k + p/k)**2)/sqrt((-p/2 + (-b - sqrt(p)*sqrt(-2*b*k + p)/k + p/k)/k)**2 + (-sqrt(p)*sqrt(-2*b*k + p)/k + p/k)**2)"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A.distance(F)/B.distance(F)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\frac{p}{2} + \\frac{- b + \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}}{k}}{\\frac{p}{2} + \\frac{- b - \\frac{\\sqrt{p} \\sqrt{- 2 b k + p}}{k} + \\frac{p}{k}}{k}}$"
      ],
      "text/plain": [
       "(p/2 + (-b + sqrt(p)*sqrt(-2*b*k + p)/k + p/k)/k)/(p/2 + (-b - sqrt(p)*sqrt(-2*b*k + p)/k + p/k)/k)"
      ]
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(x1+p/2)/(x2+p/2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{- 2 b k + k^{2} p + 2 \\sqrt{p} \\sqrt{- 2 b k + p} + 2 p}{- 2 b k + k^{2} p - 2 \\sqrt{p} \\sqrt{- 2 b k + p} + 2 p}$"
      ],
      "text/plain": [
       "(-2*b*k + k**2*p + 2*sqrt(p)*sqrt(-2*b*k + p) + 2*p)/(-2*b*k + k**2*p - 2*sqrt(p)*sqrt(-2*b*k + p) + 2*p)"
      ]
     },
     "execution_count": 178,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 5$"
      ],
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check.subs({b:0,k:1,p:1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\sqrt{3} + 5}{5 - 2 \\sqrt{3}}$"
      ],
      "text/plain": [
       "(2*sqrt(3) + 5)/(5 - 2*sqrt(3))"
      ]
     },
     "execution_count": 188,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check.subs({b:-1,k:1,p:1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{20 \\sqrt{3}}{13} + \\frac{37}{13}$"
      ],
      "text/plain": [
       "20*sqrt(3)/13 + 37/13"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nsimplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 272,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 9. CB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [],
   "source": [
    "radius=sqrt(7-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2$"
      ],
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 193,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "radius"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Circle(O,radius)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [],
   "source": [
    "cone=Cone(sqrt(3),Circle(O,radius))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Cone}\\left(\\operatorname{Point3D}\\left(0, 0, \\sqrt{3}\\right), \\operatorname{Circle}\\left(\\operatorname{Point2D}\\left(0, 0\\right), 2\\right)\\right)$"
      ],
      "text/plain": [
       "Cone(Point3D(0, 0, sqrt(3)), Circle(Point2D(0, 0), 2))"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cone"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [],
   "source": [
    "S=cone.vertice"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(0, 0, \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "Point3D(0, 0, sqrt(3))"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [],
   "source": [
    "t1,t2=symbols(\"t1,t2\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=c.arbitrary_point(t1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(2 \\cos{\\left(t_{1} \\right)}, 2 \\sin{\\left(t_{1} \\right)}\\right)$"
      ],
      "text/plain": [
       "Point2D(2*cos(t1), 2*sin(t1))"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [],
   "source": [
    "Q=c.arbitrary_point(t2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(2 \\cos{\\left(t_{2} \\right)}, 2 \\sin{\\left(t_{2} \\right)}\\right)$"
      ],
      "text/plain": [
       "Point2D(2*cos(t2), 2*sin(t2))"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [],
   "source": [
    "tri=Polygon3D(S,P,Q)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{- 6 \\cos{\\left(t_{1} - t_{2} \\right)} - 2 \\cos{\\left(2 t_{1} - 2 t_{2} \\right)} + 8}$"
      ],
      "text/plain": [
       "sqrt(-6*cos(t1 - t2) - 2*cos(2*t1 - 2*t2) + 8)"
      ]
     },
     "execution_count": 210,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tri.area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=sqrt(-6*cos(x)-2*cos(2*x)+8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{- 6 \\cos{\\left(x \\right)} - 2 \\cos{\\left(2 x \\right)} + 8}$"
      ],
      "text/plain": [
       "sqrt(-6*cos(x) - 2*cos(2*x) + 8)"
      ]
     },
     "execution_count": 212,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(2 \\sqrt{3}, \\sqrt{\\frac{25}{2} - 2 \\cos{\\left(2 \\operatorname{atan}{\\left(\\frac{\\sqrt{7}}{3} \\right)} \\right)}}\\right]$"
      ],
      "text/plain": [
       "Interval.Lopen(2*sqrt(3), sqrt(25/2 - 2*cos(2*atan(sqrt(7)/3))))"
      ]
     },
     "execution_count": 220,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(check,x,Interval.open(-pi,pi))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(2 \\sqrt{3}, \\sqrt{\\frac{25}{2} - 2 \\cos{\\left(2 \\operatorname{atan}{\\left(\\frac{\\sqrt{7}}{3} \\right)} \\right)}}\\right]$"
      ],
      "text/plain": [
       "Interval.Lopen(2*sqrt(3), sqrt(25/2 - 2*cos(2*atan(sqrt(7)/3))))"
      ]
     },
     "execution_count": 222,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{7}{2}$"
      ],
      "text/plain": [
       "7/2"
      ]
     },
     "execution_count": 223,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nsimplify(answer.sup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "metadata": {},
   "outputs": [],
   "source": [
    "pyd=Pyramid(S,Polygon(O,P,Q))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{3} \\left|{\\frac{\\sin{\\left(t_{1} - t_{2} \\right)}}{\\left|{\\sin{\\left(t_{1} - t_{2} \\right)}}\\right|}}\\right| \\left|{\\sqrt{2 - 2 \\cos{\\left(2 t_{1} - 2 t_{2} \\right)}}}\\right|}{3}$"
      ],
      "text/plain": [
       "sqrt(3)*Abs(sin(t1 - t2)/Abs(sin(t1 - t2)))*Abs(sqrt(2 - 2*cos(2*t1 - 2*t2)))/3"
      ]
     },
     "execution_count": 219,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyd.volume"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Sphere}\\left(\\operatorname{Point3D}\\left(\\frac{\\sin{\\left(t_{1} \\right)} - \\sin{\\left(t_{2} \\right)}}{\\sin{\\left(t_{1} - t_{2} \\right)}}, \\frac{- \\cos{\\left(t_{1} \\right)} + \\cos{\\left(t_{2} \\right)}}{\\sin{\\left(t_{1} - t_{2} \\right)}}, \\frac{\\sqrt{3}}{2}\\right), \\sqrt{\\frac{4 \\cos{\\left(t_{1} - t_{2} \\right)} + \\frac{3 \\cos{\\left(2 t_{1} - 2 t_{2} \\right)}}{4} - \\frac{19}{4}}{\\cos{\\left(2 t_{1} - 2 t_{2} \\right)} - 1}}\\right)$"
      ],
      "text/plain": [
       "Sphere(Point3D((sin(t1) - sin(t2))/sin(t1 - t2), (-cos(t1) + cos(t2))/sin(t1 - t2), sqrt(3)/2), sqrt((4*cos(t1 - t2) + 3*cos(2*t1 - 2*t2)/4 - 19/4)/(cos(2*t1 - 2*t2) - 1)))"
      ]
     },
     "execution_count": 224,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyd.circumsphere"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 \\pi \\left(4 \\cos{\\left(t_{1} - t_{2} \\right)} + \\frac{3 \\cos{\\left(2 t_{1} - 2 t_{2} \\right)}}{4} - \\frac{19}{4}\\right)}{\\cos{\\left(2 t_{1} - 2 t_{2} \\right)} - 1}$"
      ],
      "text/plain": [
       "4*pi*(4*cos(t1 - t2) + 3*cos(2*t1 - 2*t2)/4 - 19/4)/(cos(2*t1 - 2*t2) - 1)"
      ]
     },
     "execution_count": 225,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.surface_area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 \\pi \\left(4 \\cos{\\left(x \\right)} + \\frac{3 \\cos{\\left(2 x \\right)}}{4} - \\frac{19}{4}\\right)}{\\cos{\\left(2 x \\right)} - 1}$"
      ],
      "text/plain": [
       "4*pi*(4*cos(x) + 3*cos(2*x)/4 - 19/4)/(cos(2*x) - 1)"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.subs({t1-t2:x,2*t1-2*t2:2*x})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(7 \\pi, \\infty\\right)$"
      ],
      "text/plain": [
       "Interval.open(7*pi, oo)"
      ]
     },
     "execution_count": 228,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(check,x,Interval.open(0,pi))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [],
   "source": [
    "from geometry3D.utils import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(0, 0, \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "Point3D(0, 0, sqrt(3))"
      ]
     },
     "execution_count": 232,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Point3D(0, 0, 0)]"
      ]
     },
     "execution_count": 233,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "points_to_3d(O)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 235,
   "metadata": {},
   "outputs": [],
   "source": [
    "plane=Plane(S,points_to_3d(O)[0],points_to_3d(Q)[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Plane}\\left(\\operatorname{Point3D}\\left(0, 0, \\sqrt{3}\\right), \\left( 2 \\sqrt{3} \\sin{\\left(t_{2} \\right)}, \\  - 2 \\sqrt{3} \\cos{\\left(t_{2} \\right)}, \\  0\\right)\\right)$"
      ],
      "text/plain": [
       "Plane(Point3D(0, 0, sqrt(3)), (2*sqrt(3)*sin(t2), -2*sqrt(3)*cos(t2), 0))"
      ]
     },
     "execution_count": 236,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plane"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(S,points_to_3d(P)[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Line3D}\\left(\\operatorname{Point3D}\\left(0, 0, \\sqrt{3}\\right), \\operatorname{Point3D}\\left(2 \\cos{\\left(t_{1} \\right)}, 2 \\sin{\\left(t_{1} \\right)}, 0\\right)\\right)$"
      ],
      "text/plain": [
       "Line3D(Point3D(0, 0, sqrt(3)), Point3D(2*cos(t1), 2*sin(t1), 0))"
      ]
     },
     "execution_count": 238,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 240,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=cos(plane.angle_between(l))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 241,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{49 - 28 \\sin^{2}{\\left(t_{1} - t_{2} \\right)}}}{7}$"
      ],
      "text/plain": [
       "sqrt(49 - 28*sin(t1 - t2)**2)/7"
      ]
     },
     "execution_count": 241,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(answer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\frac{\\sqrt{21}}{7}, 1\\right)$"
      ],
      "text/plain": [
       "Interval.Ropen(sqrt(21)/7, 1)"
      ]
     },
     "execution_count": 242,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(_.subs(t1-t2,x),x,Interval.open(0,pi))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 10. BD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [],
   "source": [
    "X,Y=symbols(\"X,Y\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle X + Y = 2$"
      ],
      "text/plain": [
       "Eq(X + Y, 2)"
      ]
     },
     "execution_count": 246,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Eq(X+Y,2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先Xn+Yn=2，然后Xn的取值可以是【0，1，2】（顶多）。\n",
    "然后我们知道X（n+1）和Xn应该是有一个关系的，\n",
    "最后，问题的关键就在于求这个关系。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以发现这里面具有一种对称性，也是高考之前经常考的点，虽然它在高中并不体现为一个知识点，但确实应该具有这种数学敏锐度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里我们假设：Pn等于Qn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "同时P(Xn=0)=P(Xn=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [],
   "source": [
    "P1=1/S(3)*1/S(3)+2/S(3)*2/S(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{5}{9}$"
      ],
      "text/plain": [
       "5/9"
      ]
     },
     "execution_count": 250,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=2/S(3)*1/S(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2}{9}$"
      ],
      "text/plain": [
       "2/9"
      ]
     },
     "execution_count": 252,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "answer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Function(\"P\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle P{\\left(n \\right)}$"
      ],
      "text/plain": [
       "P(n)"
      ]
     },
     "execution_count": 256,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$P(X_n=2)=P(X_n=0)=\\frac{(1-P(n))}{2}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [],
   "source": [
    "fp=(1-P(n))/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{2} - \\frac{P{\\left(n \\right)}}{2}$"
      ],
      "text/plain": [
       "1/2 - P(n)/2"
      ]
     },
     "execution_count": 258,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 264,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\left(- \\frac{1}{9}\\right)^{n}}{5} + \\frac{3}{5}$"
      ],
      "text/plain": [
       "2*(-1/9)**n/5 + 3/5"
      ]
     },
     "execution_count": 264,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rsolve(P(n+1)-((1/S(3)*1/S(3)+2/S(3)*2/S(3))*P(n)+2/S(3)*1*fp*2),P(n),{P(1):5/S(9)})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 263,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{P{\\left(n \\right)}}{9} + P{\\left(n + 1 \\right)} - \\frac{2}{3}$"
      ],
      "text/plain": [
       "P(n)/9 + P(n + 1) - 2/3"
      ]
     },
     "execution_count": 263,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(n+1)-((1/S(3)*1/S(3)+2/S(3)*2/S(3))*P(n)+2/S(3)*1*fp*2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 265,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 11. ACD"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分两种情况，一种是第一个盒子2个球，第二种是第一个盒子一个甲球。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 274,
   "metadata": {},
   "outputs": [],
   "source": [
    "first=binomial(4,1)*ff(4,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 275,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 96$"
      ],
      "text/plain": [
       "96"
      ]
     },
     "execution_count": 275,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 278,
   "metadata": {},
   "outputs": [],
   "source": [
    "second=(binomial(4,2)*binomial(2,1)/2)*ff(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 279,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 36$"
      ],
      "text/plain": [
       "36"
      ]
     },
     "execution_count": 279,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "second"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 280,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 132$"
      ],
      "text/plain": [
       "132"
      ]
     },
     "execution_count": 280,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first+second"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 281,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 12. 132"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 285,
   "metadata": {},
   "outputs": [],
   "source": [
    "omega,phi=symbols(\"omega,phi\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 284,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\omega$"
      ],
      "text/plain": [
       "omega"
      ]
     },
     "execution_count": 284,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "omega"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 286,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\phi$"
      ],
      "text/plain": [
       "phi"
      ]
     },
     "execution_count": 286,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "phi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 287,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=sin(omega*x+phi)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 288,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sin{\\left(\\omega x + \\phi \\right)}$"
      ],
      "text/plain": [
       "sin(omega*x + phi)"
      ]
     },
     "execution_count": 288,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 290,
   "metadata": {},
   "outputs": [],
   "source": [
    "arg,=expr.args"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 291,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\omega x + \\phi$"
      ],
      "text/plain": [
       "omega*x + phi"
      ]
     },
     "execution_count": 291,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 292,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\pi \\omega}{6} + \\phi$"
      ],
      "text/plain": [
       "-pi*omega/6 + phi"
      ]
     },
     "execution_count": 292,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arg.subs(x,-pi/6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 298,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(\\pi, \\frac{4 \\pi}{3}\\right)$"
      ],
      "text/plain": [
       "Interval.open(pi, 4*pi/3)"
      ]
     },
     "execution_count": 298,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Interval.open(pi,4*pi/3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 295,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr1=sin(omega*(x+pi/6)+pi/2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 296,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr2=sin(omega*(x+pi/6)-pi/2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 299,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(\\frac{7 \\pi}{6}, \\frac{3 \\pi}{2}\\right)$"
      ],
      "text/plain": [
       "Interval.open(7*pi/6, 3*pi/2)"
      ]
     },
     "execution_count": 299,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Interval.open(pi+pi/6,4*pi/3+pi/6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 300,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(\\frac{\\pi k}{\\omega}, \\frac{\\pi k + \\pi}{\\omega}\\right)$"
      ],
      "text/plain": [
       "Interval.open(pi*k/omega, (pi*k + pi)/omega)"
      ]
     },
     "execution_count": 300,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Interval.open((0+k*pi)/omega,(pi+k*pi)/omega)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 305,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Interval(6/7, 4/3)\n",
      "Interval(12/7, 2)\n",
      "Interval(18/7, 8/3)\n",
      "EmptySet\n"
     ]
    }
   ],
   "source": [
    "for i in range(1,5):\n",
    "    answer=solve_univariate_inequalities([7/S(6)>=i/omega,(i+1)/omega>=9/S(6)],omega)\n",
    "    print(answer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 13. 8/3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 311,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 \\sqrt{6}}{3}$"
      ],
      "text/plain": [
       "4*sqrt(6)/3"
      ]
     },
     "execution_count": 311,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sqrt(4**2-(4/sqrt(3))**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 312,
   "metadata": {},
   "outputs": [],
   "source": [
    "pyd=Pyramid(_,RegularPolygon(Point(0,0),4/sqrt(3),3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 313,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( \\operatorname{Point3D}\\left(0, 0, \\frac{4 \\sqrt{6}}{3}\\right), \\  \\operatorname{Point3D}\\left(\\frac{4 \\sqrt{3}}{3}, 0, 0\\right), \\  \\operatorname{Point3D}\\left(- \\frac{2 \\sqrt{3}}{3}, 2, 0\\right), \\  \\operatorname{Point3D}\\left(- \\frac{2 \\sqrt{3}}{3}, -2, 0\\right)\\right)$"
      ],
      "text/plain": [
       "(Point3D(0, 0, 4*sqrt(6)/3), Point3D(4*sqrt(3)/3, 0, 0), Point3D(-2*sqrt(3)/3, 2, 0), Point3D(-2*sqrt(3)/3, -2, 0))"
      ]
     },
     "execution_count": 313,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyd.vertices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 314,
   "metadata": {},
   "outputs": [],
   "source": [
    "S,A,B,C=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 315,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4$"
      ],
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 315,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "S.distance(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 316,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4$"
      ],
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 316,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B.distance(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 317,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Sphere}\\left(\\operatorname{Point3D}\\left(0, 0, \\frac{\\sqrt{6}}{3}\\right), \\sqrt{6}\\right)$"
      ],
      "text/plain": [
       "Sphere(Point3D(0, 0, sqrt(6)/3), sqrt(6))"
      ]
     },
     "execution_count": 317,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyd.circumsphere"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二问是一个套路，需要使用球心O，来构造向量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 318,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 14. sqrt(6) 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 319,
   "metadata": {},
   "outputs": [],
   "source": [
    "score2=[5,4,3,6,7]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 321,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[5, 4, 3, 6, 7]"
      ]
     },
     "execution_count": 321,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 322,
   "metadata": {},
   "outputs": [],
   "source": [
    "score3=[1,0,1,2,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 323,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 0, 1, 2, 1]"
      ]
     },
     "execution_count": 323,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 328,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 329,
   "metadata": {},
   "outputs": [],
   "source": [
    "p2=sum(score2)/S(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 330,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{2}$"
      ],
      "text/plain": [
       "1/2"
      ]
     },
     "execution_count": 330,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 333,
   "metadata": {},
   "outputs": [],
   "source": [
    "p3=sum(score3)/S(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 334,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{10}$"
      ],
      "text/plain": [
       "1/10"
      ]
     },
     "execution_count": 334,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 365,
   "metadata": {},
   "outputs": [],
   "source": [
    "X=Binomial(\"X\",2,p2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 366,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y=Binomial(\"Y\",1,p3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 367,
   "metadata": {},
   "outputs": [],
   "source": [
    "Z=2*X+3*Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 368,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 9/40, 2: 9/20, 4: 9/40, 3: 1/40, 5: 1/20, 7: 1/40}"
      ]
     },
     "execution_count": 368,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "density(Z).dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 340,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.stats import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 369,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{11}{20}$"
      ],
      "text/plain": [
       "11/20"
      ]
     },
     "execution_count": 369,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E(Z>3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 360,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 165$"
      ],
      "text/plain": [
       "165"
      ]
     },
     "execution_count": 360,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "300*_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 361,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 15.(1) 165"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 344,
   "metadata": {},
   "outputs": [],
   "source": [
    "score2_second=[2,4,3,5,6]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 345,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 4, 3, 5, 6]"
      ]
     },
     "execution_count": 345,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score2_second"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 346,
   "metadata": {},
   "outputs": [],
   "source": [
    "score3_second=[2,2,3,1,3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 348,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 2, 3, 1, 3]"
      ]
     },
     "execution_count": 348,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score3_second"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 349,
   "metadata": {},
   "outputs": [],
   "source": [
    "p2_second=sum(score2_second)/S(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 350,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2}{5}$"
      ],
      "text/plain": [
       "2/5"
      ]
     },
     "execution_count": 350,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p2_second"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 351,
   "metadata": {},
   "outputs": [],
   "source": [
    "X2=Binomial(\"X2\",2,p2_second)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 352,
   "metadata": {},
   "outputs": [],
   "source": [
    "p3_second=sum(score3_second)/S(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 353,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{11}{50}$"
      ],
      "text/plain": [
       "11/50"
      ]
     },
     "execution_count": 353,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p3_second"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 354,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y2=Binomial(\"Y2\",1,p3_second)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 362,
   "metadata": {},
   "outputs": [],
   "source": [
    "Z2=2*X2+3*Y2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 363,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 351/1250, 2: 234/625, 4: 78/625, 3: 99/1250, 5: 66/625, 7: 22/625}"
      ]
     },
     "execution_count": 363,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "density(Z2).dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 372,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3}{10}$"
      ],
      "text/plain": [
       "3/10"
      ]
     },
     "execution_count": 372,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(Z>3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 374,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{166}{625}$"
      ],
      "text/plain": [
       "166/625"
      ]
     },
     "execution_count": 374,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(Z2>3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 376,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{9}{40}$"
      ],
      "text/plain": [
       "9/40"
      ]
     },
     "execution_count": 376,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(Eq(Z,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 378,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 378,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(And(Z2>3 , Z2<4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 379,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3}{250}$"
      ],
      "text/plain": [
       "3/250"
      ]
     },
     "execution_count": 379,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p_sum=0\n",
    "for i in range(5,8):\n",
    "    p_sum+=P(Eq(Z,i))*P(And(Z2>3 , Z2<i))\n",
    "p_sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 380,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 15.(2) 3/250"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 381,
   "metadata": {},
   "outputs": [],
   "source": [
    "pyd=Pyramid(Point(0,0,2),Polygon((0,0),(2,0),(0,2)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 382,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Tetrahedron}\\left(\\operatorname{Point3D}\\left(0, 0, 2\\right), \\operatorname{Point3D}\\left(0, 0, 0\\right), \\operatorname{Point3D}\\left(2, 0, 0\\right), \\operatorname{Point3D}\\left(0, 2, 0\\right)\\right)$"
      ],
      "text/plain": [
       "Tetrahedron(Point3D(0, 0, 2), Point3D(0, 0, 0), Point3D(2, 0, 0), Point3D(0, 2, 0))"
      ]
     },
     "execution_count": 382,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 383,
   "metadata": {},
   "outputs": [],
   "source": [
    "P,B,A,Q=_.vertices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 385,
   "metadata": {},
   "outputs": [],
   "source": [
    "C=(B+Q)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 386,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(0, 1, 0\\right)$"
      ],
      "text/plain": [
       "Point3D(0, 1, 0)"
      ]
     },
     "execution_count": 386,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 387,
   "metadata": {},
   "outputs": [],
   "source": [
    "D=(A+Q)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 388,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(1, 1, 0\\right)$"
      ],
      "text/plain": [
       "Point3D(1, 1, 0)"
      ]
     },
     "execution_count": 388,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 389,
   "metadata": {},
   "outputs": [],
   "source": [
    "E=(P+A)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 390,
   "metadata": {},
   "outputs": [],
   "source": [
    "F=(P+B)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 391,
   "metadata": {},
   "outputs": [],
   "source": [
    "G,=Intersection(Line(P,D),Line(E,Q))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 392,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(\\frac{2}{3}, \\frac{2}{3}, \\frac{2}{3}\\right)$"
      ],
      "text/plain": [
       "Point3D(2/3, 2/3, 2/3)"
      ]
     },
     "execution_count": 392,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "G"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 393,
   "metadata": {},
   "outputs": [],
   "source": [
    "H,=Intersection(Line(P,C),Line(F,Q))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 394,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(0, \\frac{2}{3}, \\frac{2}{3}\\right)$"
      ],
      "text/plain": [
       "Point3D(0, 2/3, 2/3)"
      ]
     },
     "execution_count": 394,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "H"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 395,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_AB=Line(A,B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 397,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[-2, 0, 0]"
      ]
     },
     "execution_count": 397,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l_AB.direction_ratio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 398,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_GH=Line(G,H)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 399,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[-2/3, 0, 0]"
      ]
     },
     "execution_count": 399,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l_GH.direction_ratio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 400,
   "metadata": {},
   "outputs": [],
   "source": [
    "m=Matrix([_,l_AB.direction_ratio])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 401,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}- \\frac{2}{3} & 0 & 0\\\\-2 & 0 & 0\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "Matrix([\n",
       "[-2/3, 0, 0],\n",
       "[  -2, 0, 0]])"
      ]
     },
     "execution_count": 401,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 404,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 404,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.rank()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 405,
   "metadata": {},
   "outputs": [],
   "source": [
    "plane1=Plane(P,A,B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 406,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Plane}\\left(\\operatorname{Point3D}\\left(0, 0, 2\\right), \\left( 0, \\  4, \\  0\\right)\\right)$"
      ],
      "text/plain": [
       "Plane(Point3D(0, 0, 2), (0, 4, 0))"
      ]
     },
     "execution_count": 406,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plane1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 407,
   "metadata": {},
   "outputs": [],
   "source": [
    "plane2=Plane(P,C,D)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 408,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Plane}\\left(\\operatorname{Point3D}\\left(0, 0, 2\\right), \\left( 0, \\  -2, \\  -1\\right)\\right)$"
      ],
      "text/plain": [
       "Plane(Point3D(0, 0, 2), (0, -2, -1))"
      ]
     },
     "execution_count": 408,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plane2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 411,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{acos}{\\left(- \\frac{2 \\sqrt{5}}{5} \\right)}$"
      ],
      "text/plain": [
       "acos(-2*sqrt(5)/5)"
      ]
     },
     "execution_count": 411,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plane1.angle_between(plane2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 412,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\sqrt{5}}{5}$"
      ],
      "text/plain": [
       "2*sqrt(5)/5"
      ]
     },
     "execution_count": 412,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Abs(cos(_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 413,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\sqrt{5}}{5}$"
      ],
      "text/plain": [
       "2*sqrt(5)/5"
      ]
     },
     "execution_count": 413,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A.distance(plane2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 414,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 16.(1) OK (2) 2/sqrt(5) 2/sqrt(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 419,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sympy.core.function.UndefinedFunction"
      ]
     },
     "execution_count": 419,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(S)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 421,
   "metadata": {},
   "outputs": [],
   "source": [
    "del S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 422,
   "metadata": {},
   "outputs": [],
   "source": [
    "S=Function(\"S\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 423,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=Eq(2*S(n),3*(S(n)-S(n-1))-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 424,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 S{\\left(n \\right)} = 3 S{\\left(n \\right)} - 3 S{\\left(n - 1 \\right)} - 3$"
      ],
      "text/plain": [
       "Eq(2*S(n), 3*S(n) - 3*S(n - 1) - 3)"
      ]
     },
     "execution_count": 424,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 425,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot 3^{n}}{2} - \\frac{3}{2}$"
      ],
      "text/plain": [
       "3*3**n/2 - 3/2"
      ]
     },
     "execution_count": 425,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rsolve(eq1,S(n),{S(1):3})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 426,
   "metadata": {},
   "outputs": [],
   "source": [
    "Sn=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 427,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot 3^{n}}{2} - \\frac{3}{2}$"
      ],
      "text/plain": [
       "3*3**n/2 - 3/2"
      ]
     },
     "execution_count": 427,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Sn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 428,
   "metadata": {},
   "outputs": [],
   "source": [
    "an=Sn-Sn.subs(n,n-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 429,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot 3^{n}}{2} - \\frac{3 \\cdot 3^{n - 1}}{2}$"
      ],
      "text/plain": [
       "3*3**n/2 - 3*3**(n - 1)/2"
      ]
     },
     "execution_count": 429,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "an"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 430,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3^{n}$"
      ],
      "text/plain": [
       "3**n"
      ]
     },
     "execution_count": 430,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 431,
   "metadata": {},
   "outputs": [],
   "source": [
    "Q=Function(\"Q\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 432,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=Eq(Q(n+1),Q(n)+1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 433,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle Q{\\left(n + 1 \\right)} = Q{\\left(n \\right)} + 1$"
      ],
      "text/plain": [
       "Eq(Q(n + 1), Q(n) + 1)"
      ]
     },
     "execution_count": 433,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 434,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle n$"
      ],
      "text/plain": [
       "n"
      ]
     },
     "execution_count": 434,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rsolve(eq2,Q(n),{Q(1):1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 435,
   "metadata": {},
   "outputs": [],
   "source": [
    "Tn=_*n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 436,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle n^{2}$"
      ],
      "text/plain": [
       "n**2"
      ]
     },
     "execution_count": 436,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Tn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 438,
   "metadata": {},
   "outputs": [],
   "source": [
    "bn=Tn-Tn.subs(n,n-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 440,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 n - 1$"
      ],
      "text/plain": [
       "2*n - 1"
      ]
     },
     "execution_count": 440,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(bn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 441,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 17.(1) 3**n,2*n-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 444,
   "metadata": {},
   "outputs": [],
   "source": [
    "cn=simplify(bn)/simplify(an)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 445,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3^{- n} \\left(2 n - 1\\right)$"
      ],
      "text/plain": [
       "(2*n - 1)/3**n"
      ]
     },
     "execution_count": 445,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 449,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot 3^{- n - 1}}{2} - \\frac{1}{2} - \\frac{3^{- n} \\left(- 3 \\cdot 3^{n} + 2 n + 3\\right)}{2}$"
      ],
      "text/plain": [
       "3*3**(-n - 1)/2 - 1/2 - (-3*3**n + 2*n + 3)/(2*3**n)"
      ]
     },
     "execution_count": 449,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summation(cn,(n,1,n))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 447,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3^{- n} \\left(3^{n} - n - 1\\right)$"
      ],
      "text/plain": [
       "(3**n - n - 1)/3**n"
      ]
     },
     "execution_count": 447,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 450,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1 - 3^{- n} n - 3^{- n}$"
      ],
      "text/plain": [
       "1 - n/3**n - 1/3**n"
      ]
     },
     "execution_count": 450,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 451,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 17.(2) 1-(n+1)/3**n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 452,
   "metadata": {},
   "outputs": [],
   "source": [
    "p,q,r=symbols(\"p,q,r\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 457,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot 3^{n}}{2} - \\frac{3}{2}$"
      ],
      "text/plain": [
       "3*3**n/2 - 3/2"
      ]
     },
     "execution_count": 457,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Sn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 454,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq3=Eq(Sn.subs(n,p)+Sn.subs(n,r),2*Sn.subs(n,q))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 455,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot 3^{p}}{2} + \\frac{3 \\cdot 3^{r}}{2} - 3 = 3 \\cdot 3^{q} - 3$"
      ],
      "text/plain": [
       "Eq(3*3**p/2 + 3*3**r/2 - 3, 3*3**q - 3)"
      ]
     },
     "execution_count": 455,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 458,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot 3^{p}}{2} - 3 \\cdot 3^{q} + \\frac{3 \\cdot 3^{r}}{2}$"
      ],
      "text/plain": [
       "3*3**p/2 - 3*3**q + 3*3**r/2"
      ]
     },
     "execution_count": 458,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify_equation(eq3,expr=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 459,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\cdot \\left(3^{p} - 2 \\cdot 3^{q} + 3^{r}\\right)}{2}$"
      ],
      "text/plain": [
       "3*(3**p - 2*3**q + 3**r)/2"
      ]
     },
     "execution_count": 459,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 460,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=fraction(_)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 463,
   "metadata": {},
   "outputs": [],
   "source": [
    "check/=3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 464,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3^{p} - 2 \\cdot 3^{q} + 3^{r}$"
      ],
      "text/plain": [
       "3**p - 2*3**q + 3**r"
      ]
     },
     "execution_count": 464,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 466,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(1+3**y,2*3**x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 467,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3^{y} + 1 = 2 \\cdot 3^{x}$"
      ],
      "text/plain": [
       "Eq(3**y + 1, 2*3**x)"
      ]
     },
     "execution_count": 467,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 468,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 17.(3) No"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 469,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=Point(-2,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 470,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(-2, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(-2, 0)"
      ]
     },
     "execution_count": 470,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 473,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 474,
   "metadata": {},
   "outputs": [],
   "source": [
    "B=Point(1,3/S(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 475,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(1, \\frac{3}{2}\\right)$"
      ],
      "text/plain": [
       "Point2D(1, 3/2)"
      ]
     },
     "execution_count": 475,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 478,
   "metadata": {},
   "outputs": [],
   "source": [
    "a,b=symbols(\"a,b\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 480,
   "metadata": {},
   "outputs": [],
   "source": [
    "ellip=Ellipse(Point(0,0),a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 482,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\frac{y^{2}}{b^{2}} + \\frac{x^{2}}{a^{2}}$"
      ],
      "text/plain": [
       "-1 + y**2/b**2 + x**2/a**2"
      ]
     },
     "execution_count": 482,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ellip.equation(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 484,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{x: -2, y: 0}"
      ]
     },
     "execution_count": 484,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dict(zip((x,y),A))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 485,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=ellip.equation(x,y).subs(dict(zip((x,y),A)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 486,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\frac{4}{a^{2}}$"
      ],
      "text/plain": [
       "-1 + 4/a**2"
      ]
     },
     "execution_count": 486,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 487,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=ellip.equation(x,y).subs(dict(zip((x,y),B)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 488,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\frac{9}{4 b^{2}} + \\frac{1}{a^{2}}$"
      ],
      "text/plain": [
       "-1 + 9/(4*b**2) + a**(-2)"
      ]
     },
     "execution_count": 488,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 497,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( -2, \\  - \\sqrt{3}\\right), \\left( -2, \\  \\sqrt{3}\\right), \\left( 2, \\  - \\sqrt{3}\\right), \\left( 2, \\  \\sqrt{3}\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(-2, -sqrt(3)), (-2, sqrt(3)), (2, -sqrt(3)), (2, sqrt(3))}"
      ]
     },
     "execution_count": 497,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([eq1,eq2],[a,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 498,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(-2, sqrt(3)), (2, sqrt(3)), (-2, -sqrt(3)), (2, -sqrt(3))]"
      ]
     },
     "execution_count": 498,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 499,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=_[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 500,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 2, \\  \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "(2, sqrt(3))"
      ]
     },
     "execution_count": 500,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "answer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 501,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{4} + \\frac{y^{2}}{3} - 1$"
      ],
      "text/plain": [
       "x**2/4 + y**2/3 - 1"
      ]
     },
     "execution_count": 501,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ellip.equation().subs(dict(zip((a,b),answer)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 502,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 18.(1) x**2/4+y**2/3=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 504,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Ellipse(Point(0,0),*answer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 505,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{4} + \\frac{y^{2}}{3} - 1$"
      ],
      "text/plain": [
       "x**2/4 + y**2/3 - 1"
      ]
     },
     "execution_count": 505,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 506,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-2.40000000000000 -2.13205080756888 4.80000000000000 4.26410161513775\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,0)\"><ellipse fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.0960000000000000\" opacity=\"0.6\" cx=\"0\" cy=\"0\" rx=\"2.00000000000000\" ry=\"1.73205080756888\"/></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Ellipse}\\left(\\operatorname{Point2D}\\left(0, 0\\right), 2, \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "Ellipse(Point2D(0, 0), 2, sqrt(3))"
      ]
     },
     "execution_count": 506,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 507,
   "metadata": {},
   "outputs": [],
   "source": [
    "F=c.foci[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 508,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(1, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(1, 0)"
      ]
     },
     "execution_count": 508,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 515,
   "metadata": {},
   "outputs": [],
   "source": [
    "m =symbols(\"m\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 516,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(y-(k*x+m))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 517,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - k x - m + y$"
      ],
      "text/plain": [
       "-k*x - m + y"
      ]
     },
     "execution_count": 517,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 518,
   "metadata": {},
   "outputs": [],
   "source": [
    "P,Q=Intersection(l,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 519,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(- \\frac{- \\frac{2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3}}{4 k^{2} + 3} + m - \\frac{3 m}{4 k^{2} + 3}}{k}, \\frac{2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3}}{4 k^{2} + 3} + \\frac{3 m}{4 k^{2} + 3}\\right)$"
      ],
      "text/plain": [
       "Point2D(-(-2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3)/(4*k**2 + 3) + m - 3*m/(4*k**2 + 3))/k, 2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3)/(4*k**2 + 3) + 3*m/(4*k**2 + 3))"
      ]
     },
     "execution_count": 519,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 520,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(- \\frac{\\frac{2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3}}{4 k^{2} + 3} + m - \\frac{3 m}{4 k^{2} + 3}}{k}, - \\frac{2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3}}{4 k^{2} + 3} + \\frac{3 m}{4 k^{2} + 3}\\right)$"
      ],
      "text/plain": [
       "Point2D(-(2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3)/(4*k**2 + 3) + m - 3*m/(4*k**2 + 3))/k, -2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3)/(4*k**2 + 3) + 3*m/(4*k**2 + 3))"
      ]
     },
     "execution_count": 520,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 521,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_AP=Line(A,P)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 522,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_AQ=Line(A,Q)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 523,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(l_AP.slope+l_AQ.slope,-3/k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 524,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{- k \\sqrt{12 k^{2} - 3 m^{2} + 9} + \\frac{3 m}{2}}{4 k^{2} - 2 k m - \\sqrt{3} \\sqrt{4 k^{2} - m^{2} + 3} + 3} + \\frac{k \\sqrt{12 k^{2} - 3 m^{2} + 9} + \\frac{3 m}{2}}{4 k^{2} - 2 k m + \\sqrt{3} \\sqrt{4 k^{2} - m^{2} + 3} + 3} = - \\frac{3}{k}$"
      ],
      "text/plain": [
       "Eq((-k*sqrt(12*k**2 - 3*m**2 + 9) + 3*m/2)/(4*k**2 - 2*k*m - sqrt(3)*sqrt(4*k**2 - m**2 + 3) + 3) + (k*sqrt(12*k**2 - 3*m**2 + 9) + 3*m/2)/(4*k**2 - 2*k*m + sqrt(3)*sqrt(4*k**2 - m**2 + 3) + 3), -3/k)"
      ]
     },
     "execution_count": 524,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 525,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3}{k} = \\frac{3}{2 k - m}$"
      ],
      "text/plain": [
       "Eq(3/k, 3/(2*k - m))"
      ]
     },
     "execution_count": 525,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(eq)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 529,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{k\\right\\} \\setminus \\left\\{2 k\\right\\}$"
      ],
      "text/plain": [
       "Complement({k}, {2*k})"
      ]
     },
     "execution_count": 529,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(simplify(eq),m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 526,
   "metadata": {},
   "outputs": [],
   "source": [
    "tri=Triangle(F,P,Q)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 527,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{\\left(2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3} - 3 m\\right)^{2} + \\frac{\\left(4 k^{3} + 4 k^{2} m + 2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3} + 3 k\\right)^{2}}{k^{2}}}}{4 k^{2} + 3} + \\frac{\\sqrt{\\left(2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3} + 3 m\\right)^{2} + \\frac{\\left(4 k^{3} + 4 k^{2} m - 2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3} + 3 k\\right)^{2}}{k^{2}}}}{4 k^{2} + 3} + \\frac{4 \\sqrt{3} \\sqrt{4 k^{4} - k^{2} m^{2} + 7 k^{2} - m^{2} + 3}}{4 k^{2} + 3}$"
      ],
      "text/plain": [
       "sqrt((2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3) - 3*m)**2 + (4*k**3 + 4*k**2*m + 2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3) + 3*k)**2/k**2)/(4*k**2 + 3) + sqrt((2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3) + 3*m)**2 + (4*k**3 + 4*k**2*m - 2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3) + 3*k)**2/k**2)/(4*k**2 + 3) + 4*sqrt(3)*sqrt(4*k**4 - k**2*m**2 + 7*k**2 - m**2 + 3)/(4*k**2 + 3)"
      ]
     },
     "execution_count": 527,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tri.perimeter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 528,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{\\left(2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3} - 3 m\\right)^{2} + \\left(4 k^{2} + 4 k m + 2 \\sqrt{3} \\sqrt{4 k^{2} - m^{2} + 3} + 3\\right)^{2}} + \\sqrt{\\left(2 \\sqrt{3} k \\sqrt{4 k^{2} - m^{2} + 3} + 3 m\\right)^{2} + \\left(4 k^{2} + 4 k m - 2 \\sqrt{3} \\sqrt{4 k^{2} - m^{2} + 3} + 3\\right)^{2}} + 4 \\sqrt{12 k^{4} - 3 k^{2} m^{2} + 21 k^{2} - 3 m^{2} + 9}}{4 k^{2} + 3}$"
      ],
      "text/plain": [
       "(sqrt((2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3) - 3*m)**2 + (4*k**2 + 4*k*m + 2*sqrt(3)*sqrt(4*k**2 - m**2 + 3) + 3)**2) + sqrt((2*sqrt(3)*k*sqrt(4*k**2 - m**2 + 3) + 3*m)**2 + (4*k**2 + 4*k*m - 2*sqrt(3)*sqrt(4*k**2 - m**2 + 3) + 3)**2) + 4*sqrt(12*k**4 - 3*k**2*m**2 + 21*k**2 - 3*m**2 + 9))/(4*k**2 + 3)"
      ]
     },
     "execution_count": 528,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 563,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=simplify(tri.perimeter.subs(m,k))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 566,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{12 \\sqrt{k^{4} + 2 k^{2} + 1} + \\sqrt{100 k^{4} - 60 k^{2} \\sqrt{k^{2} + 1} + 129 k^{2} - 36 \\sqrt{k^{2} + 1} + 45} + \\sqrt{100 k^{4} + 60 k^{2} \\sqrt{k^{2} + 1} + 129 k^{2} + 36 \\sqrt{k^{2} + 1} + 45}}{4 k^{2} + 3}$"
      ],
      "text/plain": [
       "(12*sqrt(k**4 + 2*k**2 + 1) + sqrt(100*k**4 - 60*k**2*sqrt(k**2 + 1) + 129*k**2 - 36*sqrt(k**2 + 1) + 45) + sqrt(100*k**4 + 60*k**2*sqrt(k**2 + 1) + 129*k**2 + 36*sqrt(k**2 + 1) + 45))/(4*k**2 + 3)"
      ]
     },
     "execution_count": 566,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 540,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 8$"
      ],
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 540,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nsimplify(check.subs(k,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 541,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 8$"
      ],
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 541,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nsimplify(check.subs(k,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 580,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8\n",
      "8\n",
      "8\n",
      "8\n",
      "8\n"
     ]
    }
   ],
   "source": [
    "for i in range(1,6):\n",
    "    print(nsimplify(check.subs(k,i)))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 595,
   "metadata": {},
   "outputs": [],
   "source": [
    "p=fraction(check)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 596,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 12 \\sqrt{k^{4} + 2 k^{2} + 1} + \\sqrt{100 k^{4} - 60 k^{2} \\sqrt{k^{2} + 1} + 129 k^{2} - 36 \\sqrt{k^{2} + 1} + 45} + \\sqrt{100 k^{4} + 60 k^{2} \\sqrt{k^{2} + 1} + 129 k^{2} + 36 \\sqrt{k^{2} + 1} + 45}$"
      ],
      "text/plain": [
       "12*sqrt(k**4 + 2*k**2 + 1) + sqrt(100*k**4 - 60*k**2*sqrt(k**2 + 1) + 129*k**2 - 36*sqrt(k**2 + 1) + 45) + sqrt(100*k**4 + 60*k**2*sqrt(k**2 + 1) + 129*k**2 + 36*sqrt(k**2 + 1) + 45)"
      ]
     },
     "execution_count": 596,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 597,
   "metadata": {},
   "outputs": [],
   "source": [
    "q=fraction(check)[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 598,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 k^{2} + 3$"
      ],
      "text/plain": [
       "4*k**2 + 3"
      ]
     },
     "execution_count": 598,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 616,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 12 k^{2} + 12$"
      ],
      "text/plain": [
       "12*k**2 + 12"
      ]
     },
     "execution_count": 616,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "powdenest(factor(p.args[2]),force=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 617,
   "metadata": {},
   "outputs": [],
   "source": [
    "add2=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 603,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{100 k^{4} + 60 k^{2} \\sqrt{k^{2} + 1} + 129 k^{2} + 36 \\sqrt{k^{2} + 1} + 45}$"
      ],
      "text/plain": [
       "sqrt(100*k**4 + 60*k**2*sqrt(k**2 + 1) + 129*k**2 + 36*sqrt(k**2 + 1) + 45)"
      ]
     },
     "execution_count": 603,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.args[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 606,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{129 t^{2} + 60 t \\left(t^{2} - 1\\right) + 36 t + 100 \\left(t^{2} - 1\\right)^{2} - 84}$"
      ],
      "text/plain": [
       "sqrt(129*t**2 + 60*t*(t**2 - 1) + 36*t + 100*(t**2 - 1)**2 - 84)"
      ]
     },
     "execution_count": 606,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.args[1].subs({sqrt(k**2+1):t,k**2:t**2-1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 607,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(5 t + 4\\right) \\left|{2 t - 1}\\right|$"
      ],
      "text/plain": [
       "(5*t + 4)*Abs(2*t - 1)"
      ]
     },
     "execution_count": 607,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "powdenest(factor(_),force=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 612,
   "metadata": {},
   "outputs": [],
   "source": [
    "add1=(5*t+4)*(2*t-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 613,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(2 t - 1\\right) \\left(5 t + 4\\right)$"
      ],
      "text/plain": [
       "(2*t - 1)*(5*t + 4)"
      ]
     },
     "execution_count": 613,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "add1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 609,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{100 k^{4} - 60 k^{2} \\sqrt{k^{2} + 1} + 129 k^{2} - 36 \\sqrt{k^{2} + 1} + 45}$"
      ],
      "text/plain": [
       "sqrt(100*k**4 - 60*k**2*sqrt(k**2 + 1) + 129*k**2 - 36*sqrt(k**2 + 1) + 45)"
      ]
     },
     "execution_count": 609,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.args[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 610,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{129 t^{2} - 60 t \\left(t^{2} - 1\\right) - 36 t + 100 \\left(t^{2} - 1\\right)^{2} - 84}$"
      ],
      "text/plain": [
       "sqrt(129*t**2 - 60*t*(t**2 - 1) - 36*t + 100*(t**2 - 1)**2 - 84)"
      ]
     },
     "execution_count": 610,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.args[0].subs({sqrt(k**2+1):t,k**2:t**2-1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 611,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(2 t + 1\\right) \\left|{5 t - 4}\\right|$"
      ],
      "text/plain": [
       "(2*t + 1)*Abs(5*t - 4)"
      ]
     },
     "execution_count": 611,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "powdenest(factor(_),force=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 614,
   "metadata": {},
   "outputs": [],
   "source": [
    "add0=(2*t+1)*(5*t-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 615,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(2 t + 1\\right) \\left(5 t - 4\\right)$"
      ],
      "text/plain": [
       "(2*t + 1)*(5*t - 4)"
      ]
     },
     "execution_count": 615,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "add0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 618,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 12 k^{2} + \\left(2 \\sqrt{k^{2} + 1} - 1\\right) \\left(5 \\sqrt{k^{2} + 1} + 4\\right) + \\left(2 \\sqrt{k^{2} + 1} + 1\\right) \\left(5 \\sqrt{k^{2} + 1} - 4\\right) + 12$"
      ],
      "text/plain": [
       "12*k**2 + (2*sqrt(k**2 + 1) - 1)*(5*sqrt(k**2 + 1) + 4) + (2*sqrt(k**2 + 1) + 1)*(5*sqrt(k**2 + 1) - 4) + 12"
      ]
     },
     "execution_count": 618,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "add2+(add0+add1).subs(t,sqrt(k**2+1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 620,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{32 k^{2} + 24}{4 k^{2} + 3}$"
      ],
      "text/plain": [
       "(32*k**2 + 24)/(4*k**2 + 3)"
      ]
     },
     "execution_count": 620,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)/q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 621,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 8$"
      ],
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 621,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 622,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=symbols(\"a\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 623,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=ln(x+1)-a*x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 624,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - a x + \\log{\\left(x + 1 \\right)}$"
      ],
      "text/plain": [
       "-a*x + log(x + 1)"
      ]
     },
     "execution_count": 624,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 625,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 625,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 629,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{a x + a - 1}{x + 1}$"
      ],
      "text/plain": [
       "-(a*x + a - 1)/(x + 1)"
      ]
     },
     "execution_count": 629,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 632,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(\\mathbb{R} \\cap \\left\\{- \\frac{a - 1}{a}\\right\\}\\right) \\setminus \\left\\{-1\\right\\}$"
      ],
      "text/plain": [
       "Complement(Intersection({-(a - 1)/a}, Reals), {-1})"
      ]
     },
     "execution_count": 632,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(factor(diff(expr,x)),x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 633,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Intersection({-(a - 1)/a}, Reals), {-1})"
      ]
     },
     "execution_count": 633,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.args"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 634,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Reals, {-(a - 1)/a})"
      ]
     },
     "execution_count": 634,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_[0].args"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 635,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- \\frac{a - 1}{a}\\right\\}$"
      ],
      "text/plain": [
       "{-(a - 1)/a}"
      ]
     },
     "execution_count": 635,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 636,
   "metadata": {},
   "outputs": [],
   "source": [
    "x0,=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 637,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{a - 1}{a}$"
      ],
      "text/plain": [
       "-(a - 1)/a"
      ]
     },
     "execution_count": 637,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 638,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + \\log{\\left(1 - \\frac{a - 1}{a} \\right)} - 1$"
      ],
      "text/plain": [
       "a + log(1 - (a - 1)/a) - 1"
      ]
     },
     "execution_count": 638,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,x0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 639,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr1=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 644,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + \\log{\\left(\\frac{1}{a} \\right)} - 1$"
      ],
      "text/plain": [
       "a + log(1/a) - 1"
      ]
     },
     "execution_count": 644,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand_log(simplify(expr1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 645,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x12edec710>"
      ]
     },
     "execution_count": 645,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(simplify(expr1),(a,0.2,6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 646,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 646,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr1.subs(a,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 647,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{a - 1}{a}$"
      ],
      "text/plain": [
       "(a - 1)/a"
      ]
     },
     "execution_count": 647,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr1,a))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 648,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 19.(1) a=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 651,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(expr.subs(a,1),1/S(4)*(m-3*x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 652,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - x + \\log{\\left(x + 1 \\right)} = \\frac{m}{4} - \\frac{3 x}{4}$"
      ],
      "text/plain": [
       "Eq(-x + log(x + 1), m/4 - 3*x/4)"
      ]
     },
     "execution_count": 652,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 653,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- x + 4 \\log{\\left(x + 1 \\right)}\\right\\}$"
      ],
      "text/plain": [
       "{-x + 4*log(x + 1)}"
      ]
     },
     "execution_count": 653,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq,m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 654,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_2,=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 655,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - x + 4 \\log{\\left(x + 1 \\right)}$"
      ],
      "text/plain": [
       "-x + 4*log(x + 1)"
      ]
     },
     "execution_count": 655,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 656,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x14b9bd790>"
      ]
     },
     "execution_count": 656,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr_2,(x,2,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 657,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{x - 3}{x + 1}$"
      ],
      "text/plain": [
       "-(x - 3)/(x + 1)"
      ]
     },
     "execution_count": 657,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_2,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 659,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[-4 + 4 \\log{\\left(5 \\right)}, -3 + 4 \\log{\\left(4 \\right)}\\right)$"
      ],
      "text/plain": [
       "Interval.Ropen(-4 + 4*log(5), -3 + 4*log(4))"
      ]
     },
     "execution_count": 659,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(expr_2,x,Interval.Lopen(3,4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 660,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 19.(2) Interval.Ropen(4*(ln(5)-1),4*ln(4)-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 661,
   "metadata": {},
   "outputs": [],
   "source": [
    "p=symbols(\"p\",integer=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 662,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 662,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p in Integers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 663,
   "metadata": {},
   "outputs": [],
   "source": [
    "a1=p**2/4+exp(p)-2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 664,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{p^{2}}{4} + e^{p} - 2$"
      ],
      "text/plain": [
       "p**2/4 + exp(p) - 2"
      ]
     },
     "execution_count": 664,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 676,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-3 : False\n",
      "-2 : False\n",
      "-1 : True\n",
      "0 : True\n",
      "1 : True\n",
      "2 : False\n"
     ]
    }
   ],
   "source": [
    "for i in range(-3,3):\n",
    "    print(\"%d : %r\"%(i,(p-a1).subs(p,i)>0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 677,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{7}{4} + e^{-1}$"
      ],
      "text/plain": [
       "-7/4 + exp(-1)"
      ]
     },
     "execution_count": 677,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1.subs(p,-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 678,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3}{4} - e^{-1}$"
      ],
      "text/plain": [
       "3/4 - exp(-1)"
      ]
     },
     "execution_count": 678,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(p-a1).subs(p,-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$ln(x+1)<=x$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 679,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{1}{e} - \\frac{1}{4}$"
      ],
      "text/plain": [
       "-exp(-1) - 1/4"
      ]
     },
     "execution_count": 679,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 701,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_end=x+ln(p-x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 702,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x + \\log{\\left(p - x \\right)}$"
      ],
      "text/plain": [
       "x + log(p - x)"
      ]
     },
     "execution_count": 702,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 707,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x + 2}{x + 1}$"
      ],
      "text/plain": [
       "(x + 2)/(x + 1)"
      ]
     },
     "execution_count": 707,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_end.subs(p,-1),x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 716,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x13af49290>"
      ]
     },
     "execution_count": 716,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(x,expr_end.subs(p,-1),(x,-5,-1.2),axis_center=(-2,-2),scale=(10,10),ylim=(-3,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 719,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x + \\log{\\left(- x - 1 \\right)}$"
      ],
      "text/plain": [
       "x + log(-x - 1)"
      ]
     },
     "execution_count": 719,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_end.subs(p,-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当$p=-1$时，$a_2<-2$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$x + \\log{\\left(- x - 1 \\right)}\\le x+(-x-2)=-2$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\because \\ln{(-1-a_n)}>\\ln{1}=0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\therefore$ 当$n>=2$时，$a_{n+1}>a_n$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$p=0$显然是不成立的。因为${a_n}$为常数列。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 705,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x + \\log{\\left(1 - x \\right)}$"
      ],
      "text/plain": [
       "x + log(1 - x)"
      ]
     },
     "execution_count": 705,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_end.subs(p,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 709,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x}{x - 1}$"
      ],
      "text/plain": [
       "x/(x - 1)"
      ]
     },
     "execution_count": 709,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_end,x).subs(p,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 712,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{7}{4} + e$"
      ],
      "text/plain": [
       "-7/4 + E"
      ]
     },
     "execution_count": 712,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1.subs(p,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 714,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 714,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a1.subs(p,1)>0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 711,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x13a05de90>"
      ]
     },
     "execution_count": 711,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(x,expr_end.subs(p,1),(x,-5,0.8),axis_center=(0,0),scale=(10,10),ylim=(-3,1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当$p=1$时，$a_2<0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$x + \\log{\\left(1- x  \\right)}\\le x+(-x)=0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\because \\ln{(1-a_n)}>\\ln{1}=0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\therefore$ 当$n>=2$时，$a_{n+1}>a_n$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 715,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 19.(3) p=-1 or 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 700,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "1\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[700], line 9\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m(an\u001b[38;5;241m!=\u001b[39man_old):\n\u001b[1;32m      8\u001b[0m     an_old\u001b[38;5;241m=\u001b[39man\n\u001b[0;32m----> 9\u001b[0m     an\u001b[38;5;241m=\u001b[39msimplify(an\u001b[38;5;241m+\u001b[39mln(i\u001b[38;5;241m-\u001b[39man))\n\u001b[1;32m     11\u001b[0m     count\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m\n\u001b[1;32m     12\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m(count\u001b[38;5;241m>\u001b[39m\u001b[38;5;241m10\u001b[39m):\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/simplify/simplify.py:615\u001b[0m, in \u001b[0;36msimplify\u001b[0;34m(expr, ratio, measure, rational, inverse, doit, **kwargs)\u001b[0m\n\u001b[1;32m    613\u001b[0m \u001b[38;5;66;03m# do deep simplification\u001b[39;00m\n\u001b[1;32m    614\u001b[0m handled \u001b[38;5;241m=\u001b[39m Add, Mul, Pow, ExpBase\n\u001b[0;32m--> 615\u001b[0m expr \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mreplace(\n\u001b[1;32m    616\u001b[0m     \u001b[38;5;66;03m# here, checking for x.args is not enough because Basic has\u001b[39;00m\n\u001b[1;32m    617\u001b[0m     \u001b[38;5;66;03m# args but Basic does not always play well with replace, e.g.\u001b[39;00m\n\u001b[1;32m    618\u001b[0m     \u001b[38;5;66;03m# when simultaneous is True found expressions will be masked\u001b[39;00m\n\u001b[1;32m    619\u001b[0m     \u001b[38;5;66;03m# off with a Dummy but not all Basic objects in an expression\u001b[39;00m\n\u001b[1;32m    620\u001b[0m     \u001b[38;5;66;03m# can be replaced with a Dummy\u001b[39;00m\n\u001b[1;32m    621\u001b[0m     \u001b[38;5;28;01mlambda\u001b[39;00m x: \u001b[38;5;28misinstance\u001b[39m(x, Expr) \u001b[38;5;129;01mand\u001b[39;00m x\u001b[38;5;241m.\u001b[39margs \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\n\u001b[1;32m    622\u001b[0m         x, handled),\n\u001b[1;32m    623\u001b[0m     \u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39m[simplify(i, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m x\u001b[38;5;241m.\u001b[39margs]),\n\u001b[1;32m    624\u001b[0m     simultaneous\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m    625\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(expr, handled):\n\u001b[1;32m    626\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m done(expr)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/basic.py:1666\u001b[0m, in \u001b[0;36mBasic.replace\u001b[0;34m(self, query, value, map, simultaneous, exact)\u001b[0m\n\u001b[1;32m   1663\u001b[0m             expr \u001b[38;5;241m=\u001b[39m v\n\u001b[1;32m   1664\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m expr\n\u001b[0;32m-> 1666\u001b[0m rv \u001b[38;5;241m=\u001b[39m walk(\u001b[38;5;28mself\u001b[39m, rec_replace)\n\u001b[1;32m   1667\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (rv, mapping) \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mmap\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m rv\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/basic.py:1641\u001b[0m, in \u001b[0;36mBasic.replace.<locals>.walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m   1639\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m   1640\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1641\u001b[0m         newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([walk(a, F) \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m   1642\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m   1643\u001b[0m             rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/basic.py:1641\u001b[0m, in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m   1639\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m   1640\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m args:\n\u001b[0;32m-> 1641\u001b[0m         newargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m([walk(a, F) \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m args])\n\u001b[1;32m   1642\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m args \u001b[38;5;241m!=\u001b[39m newargs:\n\u001b[1;32m   1643\u001b[0m             rv \u001b[38;5;241m=\u001b[39m rv\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39mnewargs)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/basic.py:1651\u001b[0m, in \u001b[0;36mBasic.replace.<locals>.walk\u001b[0;34m(rv, F)\u001b[0m\n\u001b[1;32m   1649\u001b[0m                     \u001b[38;5;28;01mif\u001b[39;00m rv \u001b[38;5;241m==\u001b[39m e \u001b[38;5;129;01mand\u001b[39;00m e \u001b[38;5;241m!=\u001b[39m newargs[i]:\n\u001b[1;32m   1650\u001b[0m                         \u001b[38;5;28;01mreturn\u001b[39;00m rv\n\u001b[0;32m-> 1651\u001b[0m     rv \u001b[38;5;241m=\u001b[39m F(rv)\n\u001b[1;32m   1652\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m rv\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/basic.py:1659\u001b[0m, in \u001b[0;36mBasic.replace.<locals>.rec_replace\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m   1657\u001b[0m result \u001b[38;5;241m=\u001b[39m _query(expr)\n\u001b[1;32m   1658\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m result \u001b[38;5;129;01mor\u001b[39;00m result \u001b[38;5;241m==\u001b[39m {}:\n\u001b[0;32m-> 1659\u001b[0m     v \u001b[38;5;241m=\u001b[39m _value(expr, result)\n\u001b[1;32m   1660\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m v \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m v \u001b[38;5;241m!=\u001b[39m expr:\n\u001b[1;32m   1661\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mmap\u001b[39m:\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/basic.py:1625\u001b[0m, in \u001b[0;36mBasic.replace.<locals>.<lambda>\u001b[0;34m(expr, result)\u001b[0m\n\u001b[1;32m   1622\u001b[0m _query \u001b[38;5;241m=\u001b[39m query\n\u001b[1;32m   1624\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(value):\n\u001b[0;32m-> 1625\u001b[0m     _value \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mlambda\u001b[39;00m expr, result: value(expr)\n\u001b[1;32m   1626\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   1627\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[1;32m   1628\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgiven a callable, replace() expects \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m   1629\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124manother callable\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/simplify/simplify.py:623\u001b[0m, in \u001b[0;36msimplify.<locals>.<lambda>\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m    613\u001b[0m \u001b[38;5;66;03m# do deep simplification\u001b[39;00m\n\u001b[1;32m    614\u001b[0m handled \u001b[38;5;241m=\u001b[39m Add, Mul, Pow, ExpBase\n\u001b[1;32m    615\u001b[0m expr \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mreplace(\n\u001b[1;32m    616\u001b[0m     \u001b[38;5;66;03m# here, checking for x.args is not enough because Basic has\u001b[39;00m\n\u001b[1;32m    617\u001b[0m     \u001b[38;5;66;03m# args but Basic does not always play well with replace, e.g.\u001b[39;00m\n\u001b[1;32m    618\u001b[0m     \u001b[38;5;66;03m# when simultaneous is True found expressions will be masked\u001b[39;00m\n\u001b[1;32m    619\u001b[0m     \u001b[38;5;66;03m# off with a Dummy but not all Basic objects in an expression\u001b[39;00m\n\u001b[1;32m    620\u001b[0m     \u001b[38;5;66;03m# can be replaced with a Dummy\u001b[39;00m\n\u001b[1;32m    621\u001b[0m     \u001b[38;5;28;01mlambda\u001b[39;00m x: \u001b[38;5;28misinstance\u001b[39m(x, Expr) \u001b[38;5;129;01mand\u001b[39;00m x\u001b[38;5;241m.\u001b[39margs \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\n\u001b[1;32m    622\u001b[0m         x, handled),\n\u001b[0;32m--> 623\u001b[0m     \u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39m[simplify(i, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m x\u001b[38;5;241m.\u001b[39margs]),\n\u001b[1;32m    624\u001b[0m     simultaneous\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m    625\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(expr, handled):\n\u001b[1;32m    626\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m done(expr)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/simplify/simplify.py:623\u001b[0m, in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m    613\u001b[0m \u001b[38;5;66;03m# do deep simplification\u001b[39;00m\n\u001b[1;32m    614\u001b[0m handled \u001b[38;5;241m=\u001b[39m Add, Mul, Pow, ExpBase\n\u001b[1;32m    615\u001b[0m expr \u001b[38;5;241m=\u001b[39m expr\u001b[38;5;241m.\u001b[39mreplace(\n\u001b[1;32m    616\u001b[0m     \u001b[38;5;66;03m# here, checking for x.args is not enough because Basic has\u001b[39;00m\n\u001b[1;32m    617\u001b[0m     \u001b[38;5;66;03m# args but Basic does not always play well with replace, e.g.\u001b[39;00m\n\u001b[1;32m    618\u001b[0m     \u001b[38;5;66;03m# when simultaneous is True found expressions will be masked\u001b[39;00m\n\u001b[1;32m    619\u001b[0m     \u001b[38;5;66;03m# off with a Dummy but not all Basic objects in an expression\u001b[39;00m\n\u001b[1;32m    620\u001b[0m     \u001b[38;5;66;03m# can be replaced with a Dummy\u001b[39;00m\n\u001b[1;32m    621\u001b[0m     \u001b[38;5;28;01mlambda\u001b[39;00m x: \u001b[38;5;28misinstance\u001b[39m(x, Expr) \u001b[38;5;129;01mand\u001b[39;00m x\u001b[38;5;241m.\u001b[39margs \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\n\u001b[1;32m    622\u001b[0m         x, handled),\n\u001b[0;32m--> 623\u001b[0m     \u001b[38;5;28;01mlambda\u001b[39;00m x: x\u001b[38;5;241m.\u001b[39mfunc(\u001b[38;5;241m*\u001b[39m[simplify(i, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m x\u001b[38;5;241m.\u001b[39margs]),\n\u001b[1;32m    624\u001b[0m     simultaneous\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m    625\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(expr, handled):\n\u001b[1;32m    626\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m done(expr)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/simplify/simplify.py:645\u001b[0m, in \u001b[0;36msimplify\u001b[0;34m(expr, ratio, measure, rational, inverse, doit, **kwargs)\u001b[0m\n\u001b[1;32m    643\u001b[0m expr \u001b[38;5;241m=\u001b[39m Mul(\u001b[38;5;241m*\u001b[39mpowsimp(expr)\u001b[38;5;241m.\u001b[39mas_content_primitive())\n\u001b[1;32m    644\u001b[0m _e \u001b[38;5;241m=\u001b[39m cancel(expr)\n\u001b[0;32m--> 645\u001b[0m expr1 \u001b[38;5;241m=\u001b[39m shorter(_e, _mexpand(_e)\u001b[38;5;241m.\u001b[39mcancel())  \u001b[38;5;66;03m# issue 6829\u001b[39;00m\n\u001b[1;32m    646\u001b[0m expr2 \u001b[38;5;241m=\u001b[39m shorter(together(expr, deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m), together(expr1, deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m))\n\u001b[1;32m    648\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ratio \u001b[38;5;129;01mis\u001b[39;00m S\u001b[38;5;241m.\u001b[39mInfinity:\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/expr.py:3791\u001b[0m, in \u001b[0;36mExpr.cancel\u001b[0;34m(self, *gens, **args)\u001b[0m\n\u001b[1;32m   3789\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"See the cancel function in sympy.polys\"\"\"\u001b[39;00m\n\u001b[1;32m   3790\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msympy\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpolys\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpolytools\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m cancel\n\u001b[0;32m-> 3791\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cancel(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39mgens, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39margs)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/polys/polytools.py:6859\u001b[0m, in \u001b[0;36mcancel\u001b[0;34m(f, _signsimp, *gens, **args)\u001b[0m\n\u001b[1;32m   6857\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m f\u001b[38;5;241m.\u001b[39mhas(Piecewise):\n\u001b[1;32m   6858\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m PolynomialError()\n\u001b[0;32m-> 6859\u001b[0m R, (F, G) \u001b[38;5;241m=\u001b[39m sring((p, q), \u001b[38;5;241m*\u001b[39mgens, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39margs)\n\u001b[1;32m   6860\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m R\u001b[38;5;241m.\u001b[39mngens:\n\u001b[1;32m   6861\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(f, (\u001b[38;5;28mtuple\u001b[39m, Tuple)):\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/polys/rings.py:163\u001b[0m, in \u001b[0;36msring\u001b[0;34m(exprs, *symbols, **options)\u001b[0m\n\u001b[1;32m    160\u001b[0m opt \u001b[38;5;241m=\u001b[39m build_options(symbols, options)\n\u001b[1;32m    162\u001b[0m \u001b[38;5;66;03m# TODO: rewrite this so that it doesn't use expand() (see poly()).\u001b[39;00m\n\u001b[0;32m--> 163\u001b[0m reps, opt \u001b[38;5;241m=\u001b[39m _parallel_dict_from_expr(exprs, opt)\n\u001b[1;32m    165\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m opt\u001b[38;5;241m.\u001b[39mdomain \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m    166\u001b[0m     coeffs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msum\u001b[39m([ \u001b[38;5;28mlist\u001b[39m(rep\u001b[38;5;241m.\u001b[39mvalues()) \u001b[38;5;28;01mfor\u001b[39;00m rep \u001b[38;5;129;01min\u001b[39;00m reps ], [])\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/polys/polyutils.py:326\u001b[0m, in \u001b[0;36m_parallel_dict_from_expr\u001b[0;34m(exprs, opt)\u001b[0m\n\u001b[1;32m    324\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Transform expressions into a multinomial form. \"\"\"\u001b[39;00m\n\u001b[1;32m    325\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m opt\u001b[38;5;241m.\u001b[39mexpand \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m:\n\u001b[0;32m--> 326\u001b[0m     exprs \u001b[38;5;241m=\u001b[39m [ expr\u001b[38;5;241m.\u001b[39mexpand() \u001b[38;5;28;01mfor\u001b[39;00m expr \u001b[38;5;129;01min\u001b[39;00m exprs ]\n\u001b[1;32m    328\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28many\u001b[39m(expr\u001b[38;5;241m.\u001b[39mis_commutative \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m expr \u001b[38;5;129;01min\u001b[39;00m exprs):\n\u001b[1;32m    329\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m PolynomialError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnon-commutative expressions are not supported\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/polys/polyutils.py:326\u001b[0m, in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m    324\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Transform expressions into a multinomial form. \"\"\"\u001b[39;00m\n\u001b[1;32m    325\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m opt\u001b[38;5;241m.\u001b[39mexpand \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m:\n\u001b[0;32m--> 326\u001b[0m     exprs \u001b[38;5;241m=\u001b[39m [ expr\u001b[38;5;241m.\u001b[39mexpand() \u001b[38;5;28;01mfor\u001b[39;00m expr \u001b[38;5;129;01min\u001b[39;00m exprs ]\n\u001b[1;32m    328\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28many\u001b[39m(expr\u001b[38;5;241m.\u001b[39mis_commutative \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m expr \u001b[38;5;129;01min\u001b[39;00m exprs):\n\u001b[1;32m    329\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m PolynomialError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnon-commutative expressions are not supported\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/cache.py:72\u001b[0m, in \u001b[0;36m__cacheit.<locals>.func_wrapper.<locals>.wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     69\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(func)\n\u001b[1;32m     70\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m     71\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 72\u001b[0m         retval \u001b[38;5;241m=\u001b[39m cfunc(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m     73\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m     74\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m e\u001b[38;5;241m.\u001b[39margs \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m e\u001b[38;5;241m.\u001b[39margs[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124munhashable type:\u001b[39m\u001b[38;5;124m'\u001b[39m):\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/expr.py:3682\u001b[0m, in \u001b[0;36mExpr.expand\u001b[0;34m(self, deep, modulus, power_base, power_exp, mul, log, multinomial, basic, **hints)\u001b[0m\n\u001b[1;32m   3680\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m use_hint:\n\u001b[1;32m   3681\u001b[0m         hint \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m_eval_expand_\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m+\u001b[39m hint\n\u001b[0;32m-> 3682\u001b[0m         expr, hit \u001b[38;5;241m=\u001b[39m Expr\u001b[38;5;241m.\u001b[39m_expand_hint(expr, hint, deep\u001b[38;5;241m=\u001b[39mdeep, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mhints)\n\u001b[1;32m   3684\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m   3685\u001b[0m     was \u001b[38;5;241m=\u001b[39m expr\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/expr.py:3615\u001b[0m, in \u001b[0;36mExpr._expand_hint\u001b[0;34m(expr, hint, deep, **hints)\u001b[0m\n\u001b[1;32m   3613\u001b[0m sargs \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m   3614\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m expr\u001b[38;5;241m.\u001b[39margs:\n\u001b[0;32m-> 3615\u001b[0m     arg, arghit \u001b[38;5;241m=\u001b[39m Expr\u001b[38;5;241m.\u001b[39m_expand_hint(arg, hint, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mhints)\n\u001b[1;32m   3616\u001b[0m     hit \u001b[38;5;241m|\u001b[39m\u001b[38;5;241m=\u001b[39m arghit\n\u001b[1;32m   3617\u001b[0m     sargs\u001b[38;5;241m.\u001b[39mappend(arg)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/expr.py:3615\u001b[0m, in \u001b[0;36mExpr._expand_hint\u001b[0;34m(expr, hint, deep, **hints)\u001b[0m\n\u001b[1;32m   3613\u001b[0m sargs \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m   3614\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m expr\u001b[38;5;241m.\u001b[39margs:\n\u001b[0;32m-> 3615\u001b[0m     arg, arghit \u001b[38;5;241m=\u001b[39m Expr\u001b[38;5;241m.\u001b[39m_expand_hint(arg, hint, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mhints)\n\u001b[1;32m   3616\u001b[0m     hit \u001b[38;5;241m|\u001b[39m\u001b[38;5;241m=\u001b[39m arghit\n\u001b[1;32m   3617\u001b[0m     sargs\u001b[38;5;241m.\u001b[39mappend(arg)\n",
      "    \u001b[0;31m[... skipping similar frames: Expr._expand_hint at line 3615 (3 times)]\u001b[0m\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/expr.py:3615\u001b[0m, in \u001b[0;36mExpr._expand_hint\u001b[0;34m(expr, hint, deep, **hints)\u001b[0m\n\u001b[1;32m   3613\u001b[0m sargs \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m   3614\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m arg \u001b[38;5;129;01min\u001b[39;00m expr\u001b[38;5;241m.\u001b[39margs:\n\u001b[0;32m-> 3615\u001b[0m     arg, arghit \u001b[38;5;241m=\u001b[39m Expr\u001b[38;5;241m.\u001b[39m_expand_hint(arg, hint, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mhints)\n\u001b[1;32m   3616\u001b[0m     hit \u001b[38;5;241m|\u001b[39m\u001b[38;5;241m=\u001b[39m arghit\n\u001b[1;32m   3617\u001b[0m     sargs\u001b[38;5;241m.\u001b[39mappend(arg)\n",
      "File \u001b[0;32m~/anaconda3/lib/python3.11/site-packages/sympy/core/expr.py:3599\u001b[0m, in \u001b[0;36mExpr._expand_hint\u001b[0;34m(expr, hint, deep, **hints)\u001b[0m\n\u001b[1;32m   3596\u001b[0m     real, imag \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mas_real_imag(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mhints)\n\u001b[1;32m   3597\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m real \u001b[38;5;241m+\u001b[39m S\u001b[38;5;241m.\u001b[39mImaginaryUnit\u001b[38;5;241m*\u001b[39mimag\n\u001b[0;32m-> 3599\u001b[0m \u001b[38;5;129m@staticmethod\u001b[39m\n\u001b[1;32m   3600\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_expand_hint\u001b[39m(expr, hint, deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mhints):\n\u001b[1;32m   3601\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m   3602\u001b[0m \u001b[38;5;124;03m    Helper for ``expand()``.  Recursively calls ``expr._eval_expand_hint()``.\u001b[39;00m\n\u001b[1;32m   3603\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   3606\u001b[0m \u001b[38;5;124;03m    ``False`` otherwise.\u001b[39;00m\n\u001b[1;32m   3607\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[1;32m   3608\u001b[0m     hit \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "for i in range(0,2):\n",
    "    print(i)\n",
    "    a1_temp=a1.subs(p,i)\n",
    "    an_old=a1_temp\n",
    "    an=a1_temp+ln(i-a1_temp)\n",
    "    count=0\n",
    "    while(an!=an_old):\n",
    "        an_old=an\n",
    "        an=simplify(an+ln(i-an))\n",
    "\n",
    "        count+=1\n",
    "        if(count>10):\n",
    "            print(\"OK\")\n",
    "            break\n",
    "\n",
    "        \n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2024年新高考数学一卷"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=solve_univariate_inequalities([-5<x**3,x**3<5],x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(- \\sqrt[3]{5}, \\sqrt[3]{5}\\right)$"
      ],
      "text/plain": [
       "Interval.open(-5**(1/3), 5**(1/3))"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "B=FiniteSet(-3,-1,0,2,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{-3, -1, 0, 2, 3\\right\\}$"
      ],
      "text/plain": [
       "{-3, -1, 0, 2, 3}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{-1, 0\\right\\}$"
      ],
      "text/plain": [
       "{-1, 0}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A&B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1. A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(z/(z-1),1+I)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{z}{z - 1} = 1 + i$"
      ],
      "text/plain": [
       "Eq(z/(z - 1), 1 + I)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{1 - i\\right\\}$"
      ],
      "text/plain": [
       "{1 - I}"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq,z,Complexes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=Data([0,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "b=Data([2,x])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(sum(b*(b-4*a)),0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x \\left(x - 4\\right) + 4 = 0$"
      ],
      "text/plain": [
       "Eq(x*(x - 4) + 4, 0)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{2\\right\\}$"
      ],
      "text/plain": [
       "{2}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 3. D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "m=symbols(\"m\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.abc import alpha, beta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "alpha,beta=symbols(\"alpha,beta\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=Eq(cos(alpha+beta),m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\cos{\\left(\\alpha + \\beta \\right)} = m$"
      ],
      "text/plain": [
       "Eq(cos(alpha + beta), m)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=Eq(tan(alpha)*tan(beta),2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\tan{\\left(\\alpha \\right)} \\tan{\\left(\\beta \\right)} = 2$"
      ],
      "text/plain": [
       "Eq(tan(alpha)*tan(beta), 2)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( \\alpha, \\  \\beta\\right)\\; \\middle|\\; \\left( \\alpha, \\  \\beta\\right) \\in \\mathbb{C}^{2} \\wedge - m + \\cos{\\left(\\alpha + \\beta \\right)} = 0 \\wedge \\tan{\\left(\\alpha \\right)} \\tan{\\left(\\beta \\right)} - 2 = 0 \\right\\}$"
      ],
      "text/plain": [
       "ConditionSet((alpha, beta), Eq(tan(alpha)*tan(beta) - 2, 0) & Eq(-m + cos(alpha + beta), 0), ProductSet(Complexes, Complexes))"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([eq1,eq2],[alpha,beta],Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1_trig=expand_trig(eq1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\sin{\\left(\\alpha \\right)} \\sin{\\left(\\beta \\right)} + \\cos{\\left(\\alpha \\right)} \\cos{\\left(\\beta \\right)} = m$"
      ],
      "text/plain": [
       "Eq(-sin(alpha)*sin(beta) + cos(alpha)*cos(beta), m)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1_trig"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2_trig=expand_trig(eq2.rewrite(cos))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sin{\\left(\\alpha \\right)} \\sin{\\left(\\beta \\right)}}{\\cos{\\left(\\alpha \\right)} \\cos{\\left(\\beta \\right)}} = 2$"
      ],
      "text/plain": [
       "Eq(sin(alpha)*sin(beta)/(cos(alpha)*cos(beta)), 2)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2_trig"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "data={sin(alpha)*sin(beta):x,cos(alpha)*cos(beta):y}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{sin(alpha)*sin(beta): x, cos(alpha)*cos(beta): y}"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - x + y = m$"
      ],
      "text/plain": [
       "Eq(-x + y, m)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1_trig.subs(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x}{y} = 2$"
      ],
      "text/plain": [
       "Eq(x/y, 2)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2_trig.subs(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( - 2 m, \\  - m\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(-2*m, -m)}"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([eq1_trig.subs(data),eq2_trig.subs(data)],[x,y])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "quest=cos(alpha-beta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x + y$"
      ],
      "text/plain": [
       "x + y"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand_trig(quest).subs(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4. A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "r=symbols(\"r\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r>0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Circle(Point(0,0),r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Circle}\\left(\\operatorname{Point2D}\\left(0, 0\\right), r\\right)$"
      ],
      "text/plain": [
       "Circle(Point2D(0, 0), r)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "cone=Cone(sqrt(3),c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Cone}\\left(\\operatorname{Point3D}\\left(0, 0, \\sqrt{3}\\right), \\operatorname{Circle}\\left(\\operatorname{Point2D}\\left(0, 0\\right), r\\right)\\right)$"
      ],
      "text/plain": [
       "Cone(Point3D(0, 0, sqrt(3)), Circle(Point2D(0, 0), r))"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cone"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "cylinder=Cylinder(c,sqrt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Cylinder}\\left(\\operatorname{Circle}\\left(\\operatorname{Point2D}\\left(0, 0\\right), r\\right), \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "Cylinder(Circle(Point2D(0, 0), r), sqrt(3))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cylinder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(cone.side_area,cylinder.side_area)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\pi r \\sqrt{r^{2} + 3} = 2 \\sqrt{3} \\pi r$"
      ],
      "text/plain": [
       "Eq(pi*r*sqrt(r**2 + 3), 2*sqrt(3)*pi*r)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{3\\right\\}$"
      ],
      "text/plain": [
       "{3}"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq,r,Interval.open(0,oo))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{3} \\pi r^{2}}{3}$"
      ],
      "text/plain": [
       "sqrt(3)*pi*r**2/3"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cone.volume"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 \\sqrt{3} \\pi$"
      ],
      "text/plain": [
       "3*sqrt(3)*pi"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.subs(r,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5. B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "x=symbols(\"x\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=Piecewise((-(x**2+a*x+a),x<0),(exp(x)+ln(x+1),True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\begin{cases} - a x - a - x^{2} & \\text{for}\\: x < 0 \\\\e^{x} + \\log{\\left(x + 1 \\right)} & \\text{otherwise} \\end{cases}$"
      ],
      "text/plain": [
       "Piecewise((-a*x - a - x**2, x < 0), (exp(x) + log(x + 1), True))"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr1=expr.args[0][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr2=expr.args[1][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "lt=LessThan(limit(expr1,x,0),expr2.subs(x,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - a \\leq 1$"
      ],
      "text/plain": [
       "-a <= 1"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, 0\\right]$"
      ],
      "text/plain": [
       "Interval(-oo, 0)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(factor(diff(expr1,x))>=0,a,Reals).subs(x,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[-1, 0\\right]$"
      ],
      "text/plain": [
       "Interval(-1, 0)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(lt,a,_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 6. B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr1=sin(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sin{\\left(x \\right)}$"
      ],
      "text/plain": [
       "sin(x)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr2=2*sin(3*x-pi/6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 \\cos{\\left(3 x + \\frac{\\pi}{3} \\right)}$"
      ],
      "text/plain": [
       "-2*cos(3*x + pi/3)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x11621b010>"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr1,expr2,(x,0,2*pi),axis_center=(0,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 7. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "f=Function(\"f\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "sgt=StrictGreaterThan(f(x),f(x-1)+f(x-2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle f{\\left(x \\right)} > f{\\left(x - 2 \\right)} + f{\\left(x - 1 \\right)}$"
      ],
      "text/plain": [
       "f(x) > f(x - 2) + f(x - 1)"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(f(x),f(x-1)+f(x-2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle f{\\left(x \\right)} = f{\\left(x - 2 \\right)} + f{\\left(x - 1 \\right)}$"
      ],
      "text/plain": [
       "Eq(f(x), f(x - 2) + f(x - 1))"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(\\frac{1}{2} - \\frac{\\sqrt{5}}{2}\\right)^{x} \\left(\\frac{1}{2} - \\frac{\\sqrt{5}}{10}\\right) + \\left(\\frac{1}{2} + \\frac{\\sqrt{5}}{2}\\right)^{x} \\left(\\frac{\\sqrt{5}}{10} + \\frac{1}{2}\\right)$"
      ],
      "text/plain": [
       "(1/2 - sqrt(5)/2)**x*(1/2 - sqrt(5)/10) + (1/2 + sqrt(5)/2)**x*(sqrt(5)/10 + 1/2)"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rsolve(eq,f(x),{f(1):1,f(2):2})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 89$"
      ],
      "text/plain": [
       "89"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nsimplify(expr.subs(x,10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 10946$"
      ],
      "text/plain": [
       "10946"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(expr.subs(x,20))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 8. B\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "X=Normal(\"X\",S(1.8),S(0.1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{NormalDistribution}\\left(1.8, 0.1\\right)$"
      ],
      "text/plain": [
       "NormalDistribution(1.8, 0.1)"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "density(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y=Normal(\"Y\",S(2.1),0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{False}$"
      ],
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(X>2)>0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(X>2)<0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(Y>2)>0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{False}$"
      ],
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(Y>2)<0.8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 9. BC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=(x-1)**2*(x-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(x - 4\\right) \\left(x - 1\\right)^{2}$"
      ],
      "text/plain": [
       "(x - 4)*(x - 1)**2"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 \\left(x - 3\\right) \\left(x - 1\\right)$"
      ],
      "text/plain": [
       "3*(x - 3)*(x - 1)"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr,x,2)).subs(x,3)>0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x10874a850>"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,(x,0,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\left(x - 4\\right) \\left(x - 1\\right)^{2} + \\left(x^{2} - 4\\right) \\left(x^{2} - 1\\right)^{2}$"
      ],
      "text/plain": [
       "-(x - 4)*(x - 1)**2 + (x**2 - 4)*(x**2 - 1)**2"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,x**2)-expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\left(-4 + \\left(- \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} - \\frac{1}{4} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right)^{2}\\right) \\left(-1 + \\left(- \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} - \\frac{1}{4} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right)^{2}\\right)^{2} - \\left(- \\frac{17}{4} - \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right) \\left(- \\frac{5}{4} - \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right)^{2}, 0\\right)$"
      ],
      "text/plain": [
       "Interval.Ropen((-4 + (-sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 - 1/4 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)**2)*(-1 + (-sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 - 1/4 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)**2)**2 - (-17/4 - sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)*(-5/4 - sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)**2, 0)"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(_,x,Interval.open(0,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[\\left(-4 + \\left(- \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} - \\frac{1}{4} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right)^{2}\\right) \\left(-1 + \\left(- \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} - \\frac{1}{4} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right)^{2}\\right)^{2} - \\left(- \\frac{17}{4} - \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right) \\left(- \\frac{5}{4} - \\frac{\\sqrt{- 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}} - \\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{15}{4 \\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}} + \\frac{9}{2}}}{2} + \\frac{\\sqrt{\\frac{25}{12 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}} + \\frac{9}{4} + 2 \\sqrt[3]{\\frac{\\sqrt{156441}}{576} + \\frac{81}{64}}}}{2}\\right)^{2}, 0\\right)$"
      ],
      "text/plain": [
       "Interval.Ropen((-4 + (-sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 - 1/4 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)**2)*(-1 + (-sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 - 1/4 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)**2)**2 - (-17/4 - sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)*(-5/4 - sqrt(-2*(sqrt(156441)/576 + 81/64)**(1/3) - 25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 15/(4*sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))) + 9/2)/2 + sqrt(25/(12*(sqrt(156441)/576 + 81/64)**(1/3)) + 9/4 + 2*(sqrt(156441)/576 + 81/64)**(1/3))/2)**2, 0)"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-4, 0\\right)$"
      ],
      "text/plain": [
       "Interval.open(-4, 0)"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(expr.subs(x,2*x-1),x,Interval.open(1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(2, 16\\right)$"
      ],
      "text/plain": [
       "Interval.open(2, 16)"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(expr.subs(x,2-x)-expr,x,Interval.open(-1,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 10. ACD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 506,
   "metadata": {},
   "outputs": [],
   "source": [
    "x,y=symbols(\"x,y\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 507,
   "metadata": {},
   "outputs": [],
   "source": [
    "F=Point(2,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 508,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(x+2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 509,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 510,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(P.distance(l)*P.distance(F),4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 511,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{y^{2} + \\left(x - 2\\right)^{2}} \\left|{x + 2}\\right| = 4$"
      ],
      "text/plain": [
       "Eq(sqrt(y**2 + (x - 2)**2)*Abs(x + 2), 4)"
      ]
     },
     "execution_count": 511,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x1157948d0>"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot_implicit(eq,(x,-2,8))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 512,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\text{True}$"
      ],
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 512,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq.subs(dict(zip(P,(sqrt(8),0))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 513,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{y\\; \\middle|\\; y \\in \\left\\{- \\frac{x \\sqrt{8 - x^{2}}}{x + 2}, \\frac{x \\sqrt{8 - x^{2}}}{x + 2}\\right\\} \\wedge \\sqrt{y^{2} + \\left(x - 2\\right)^{2}} - \\frac{4}{\\left|{x + 2}\\right|} = 0 \\right\\}$"
      ],
      "text/plain": [
       "ConditionSet(y, Eq(sqrt(y**2 + (x - 2)**2) - 4/Abs(x + 2), 0), {-x*sqrt(8 - x**2)/(x + 2), x*sqrt(8 - x**2)/(x + 2)})"
      ]
     },
     "execution_count": 513,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 514,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=list(_.args[2])[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 515,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x \\sqrt{8 - x^{2}}}{x + 2}$"
      ],
      "text/plain": [
       "x*sqrt(8 - x**2)/(x + 2)"
      ]
     },
     "execution_count": 515,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(0, \\frac{\\sqrt{8 - \\left(- \\frac{4}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}\\right)^{2}} \\left(- \\frac{4}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}\\right)}{\\frac{2}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}}\\right]$"
      ],
      "text/plain": [
       "Interval.Lopen(0, sqrt(8 - (-4/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3))**2)*(-4/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3))/(2/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3)))"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(check,x,Interval.Lopen(0,sqrt(8)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(0, \\frac{\\sqrt{8 - \\left(- \\frac{4}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}\\right)^{2}} \\left(- \\frac{4}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}\\right)}{\\frac{2}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}}\\right]$"
      ],
      "text/plain": [
       "Interval.Lopen(0, sqrt(8 - (-4/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3))**2)*(-4/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3))/(2/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3)))"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{8 - \\left(- \\frac{4}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}\\right)^{2}} \\left(- \\frac{4}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}\\right)}{\\frac{2}{3} + \\frac{8}{9 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}} + 2 \\sqrt[3]{\\frac{\\sqrt{33}}{9} + \\frac{19}{27}}}$"
      ],
      "text/plain": [
       "sqrt(8 - (-4/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3))**2)*(-4/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3))/(2/3 + 8/(9*(sqrt(33)/9 + 19/27)**(1/3)) + 2*(sqrt(33)/9 + 19/27)**(1/3))"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_.sup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1.03878582099005$"
      ],
      "text/plain": [
       "1.03878582099005"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{x^{3} + 4 x^{2} - 16}{\\sqrt{8 - x^{2}} \\left(x + 2\\right)^{2}}$"
      ],
      "text/plain": [
       "-(x**3 + 4*x**2 - 16)/(sqrt(8 - x**2)*(x + 2)**2)"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(check,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [],
   "source": [
    "lt=LessThan(check,4/(x+2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x \\sqrt{8 - x^{2}}}{x + 2} \\leq \\frac{4}{x + 2}$"
      ],
      "text/plain": [
       "x*sqrt(8 - x**2)/(x + 2) <= 4/(x + 2)"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=lt.rhs-lt.lhs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{x \\sqrt{8 - x^{2}}}{x + 2} + \\frac{4}{x + 2}$"
      ],
      "text/plain": [
       "-x*sqrt(8 - x**2)/(x + 2) + 4/(x + 2)"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[0, \\infty\\right)$"
      ],
      "text/plain": [
       "Interval(0, oo)"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(expr,x,Interval.Lopen(-2,sqrt(8)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 11. ABD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [],
   "source": [
    "a,b=symbols(\"a,b\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {},
   "outputs": [],
   "source": [
    "hyper=Hyperbola(Point(0,0),a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 - \\frac{y^{2}}{b^{2}} + \\frac{x^{2}}{a^{2}}$"
      ],
      "text/plain": [
       "-1 - y**2/b**2 + x**2/a**2"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [],
   "source": [
    "F1,F2=hyper.foci"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(- \\sqrt{a^{2} + b^{2}}, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(-sqrt(a**2 + b**2), 0)"
      ]
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\sqrt{a^{2} + b^{2}}, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(sqrt(a**2 + b**2), 0)"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(F2,slope=oo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(\\sqrt{a^{2} + b^{2}}, 0\\right), \\operatorname{Point2D}\\left(\\sqrt{a^{2} + b^{2}}, 1\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(sqrt(a**2 + b**2), 0), Point2D(sqrt(a**2 + b**2), 1))"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B=Intersection(l,hyper)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\sqrt{a^{2} + b^{2}}, \\frac{b^{2}}{a}\\right)$"
      ],
      "text/plain": [
       "Point2D(sqrt(a**2 + b**2), b**2/a)"
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\sqrt{a^{2} + b^{2}}, - \\frac{b^{2}}{a}\\right)$"
      ],
      "text/plain": [
       "Point2D(sqrt(a**2 + b**2), -b**2/a)"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=Eq(A.distance(F1),13)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{4 a^{2} + 4 b^{2} + \\frac{b^{4}}{a^{2}}} = 13$"
      ],
      "text/plain": [
       "Eq(sqrt(4*a**2 + 4*b**2 + b**4/a**2), 13)"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=Eq(A.distance(B),10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 b^{2}}{a} = 10$"
      ],
      "text/plain": [
       "Eq(2*b**2/a, 10)"
      ]
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( -9, \\  - 3 \\sqrt{5} i\\right), \\left( -9, \\  3 \\sqrt{5} i\\right), \\left( 4, \\  - 2 \\sqrt{5}\\right), \\left( 4, \\  2 \\sqrt{5}\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(-9, -3*sqrt(5)*I), (-9, 3*sqrt(5)*I), (4, -2*sqrt(5)), (4, 2*sqrt(5))}"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([eq1,eq2],[a,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 4, \\  2 \\sqrt{5}\\right)$"
      ],
      "text/plain": [
       "(4, 2*sqrt(5))"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(_)[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 4, \\  2 \\sqrt{5}\\right)$"
      ],
      "text/plain": [
       "(4, 2*sqrt(5))"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "answer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{a^{2} + b^{2}}}{a}$"
      ],
      "text/plain": [
       "sqrt(a**2 + b**2)/a"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.eccentricity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3}{2}$"
      ],
      "text/plain": [
       "3/2"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.subs(dict(zip((a,b),answer)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 12. $\\frac{3}{2}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [],
   "source": [
    "a=symbols(\"a\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr1=exp(x)+x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x + e^{x}$"
      ],
      "text/plain": [
       "x + exp(x)"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=ln(x+1)+a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + \\log{\\left(x + 1 \\right)}$"
      ],
      "text/plain": [
       "a + log(x + 1)"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-0.200000000000000 0.800000000000000 1.40000000000000 2.40000000000000\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,4.00000000000000)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.0480000000000000\" opacity=\"0.6\" d=\"M 0,1.00000000000000 L 1.00000000000000,3.00000000000000\" marker-start=\"url(#markerReverseArrow)\" marker-end=\"url(#markerArrow)\"/></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(0, 1\\right), \\operatorname{Point2D}\\left(1, 3\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(0, 1), Point2D(1, 3))"
      ]
     },
     "execution_count": 198,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_tangent(expr1,x,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 x + y - 1$"
      ],
      "text/plain": [
       "-2*x + y - 1"
      ]
     },
     "execution_count": 200,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2$"
      ],
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- \\frac{1}{2}\\right\\}$"
      ],
      "text/plain": [
       "{-1/2}"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr,x)-2,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(- \\frac{1}{2}, a - \\log{\\left(2 \\right)}\\right), \\operatorname{Point2D}\\left(\\frac{1}{2}, a - \\log{\\left(2 \\right)} + 2\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(-1/2, a - log(2)), Point2D(1/2, a - log(2) + 2))"
      ]
     },
     "execution_count": 206,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_tangent(expr,x,-1/S(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {},
   "outputs": [],
   "source": [
    "m=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=m.equation(x,y)-l.equation(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - a + \\log{\\left(2 \\right)}$"
      ],
      "text/plain": [
       "-a + log(2)"
      ]
     },
     "execution_count": 209,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\log{\\left(2 \\right)}\\right\\}$"
      ],
      "text/plain": [
       "{log(2)}"
      ]
     },
     "execution_count": 210,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(check,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 13. ln(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [],
   "source": [
    "list1=[1,3,5,7]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 234,
   "metadata": {},
   "outputs": [],
   "source": [
    "list2=[2,4,6,8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy.utilities.iterables import permutations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 240,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 5, 7, 3)\n",
      "(3, 1, 7, 5)\n",
      "(3, 5, 1, 7)\n",
      "(3, 5, 7, 1)\n",
      "(3, 7, 1, 5)\n",
      "(3, 7, 5, 1)\n",
      "(5, 1, 7, 3)\n",
      "(5, 3, 7, 1)\n",
      "(5, 7, 1, 3)\n",
      "(5, 7, 3, 1)\n",
      "(7, 5, 1, 3)\n",
      "(7, 5, 3, 1)\n"
     ]
    }
   ],
   "source": [
    "perms=permutations(list1)\n",
    "num=0\n",
    "for perm in perms:\n",
    "    count=0\n",
    "    for i in range(4):\n",
    "        if(perm[i]>list2[i]):\n",
    "            count+=1\n",
    "    if(count>=2):\n",
    "        num+=1\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 321,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 5, 7, 3)\n",
      "(5, 1, 7, 3)\n",
      "(5, 3, 7, 1)\n",
      "(5, 7, 1, 3)\n",
      "(5, 7, 3, 1)\n",
      "(7, 5, 1, 3)\n",
      "(7, 5, 3, 1)\n"
     ]
    }
   ],
   "source": [
    "perms=permutations(list1)\n",
    "num=0\n",
    "for perm in perms:\n",
    "    count=0\n",
    "    for i in range(4):\n",
    "        if(perm[i]>list2[i]):\n",
    "            count+=1\n",
    "    if(count==2):\n",
    "        if(list(perm).index(3)<=0 and list(perm).index(7)<=2):\n",
    "            # print(\"2,(3,7):  \"  + str(perm))\n",
    "            pass\n",
    "        elif(list(perm).index(5)<=1 and list(perm).index(7)<=2):\n",
    "            print(str(perm))\n",
    "    if(count==3):\n",
    "        \n",
    "        # print(perm)\n",
    "        pass\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 236,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [],
   "source": [
    "count=0\n",
    "perms=permutations(list1)\n",
    "for perm in perms:\n",
    "    count+=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24"
      ]
     },
     "execution_count": 238,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 14. 1/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B,C=symbols(\"A,B,C\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [],
   "source": [
    "a,b,c=symbols(\"a,b,c\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq1=Eq(sin(C),sqrt(2)*cos(B))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sin{\\left(C \\right)} = \\sqrt{2} \\cos{\\left(B \\right)}$"
      ],
      "text/plain": [
       "Eq(sin(C), sqrt(2)*cos(B))"
      ]
     },
     "execution_count": 245,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq2=Eq(a**2+b**2-c**2,sqrt(2)*a*b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a^{2} + b^{2} - c^{2} = \\sqrt{2} a b$"
      ],
      "text/plain": [
       "Eq(a**2 + b**2 - c**2, sqrt(2)*a*b)"
      ]
     },
     "execution_count": 247,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [],
   "source": [
    "law_of_cosine=Eq(a**2+b**2-c**2,2*a*b*cos(C))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a^{2} + b^{2} - c^{2} = 2 a b \\cos{\\left(C \\right)}$"
      ],
      "text/plain": [
       "Eq(a**2 + b**2 - c**2, 2*a*b*cos(C))"
      ]
     },
     "execution_count": 249,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "law_of_cosine"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [],
   "source": [
    "replace,=solveset(law_of_cosine,a**2+b**2-c**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 a b \\cos{\\left(C \\right)}$"
      ],
      "text/plain": [
       "2*a*b*cos(C)"
      ]
     },
     "execution_count": 252,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "replace"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 a b \\cos{\\left(C \\right)} = \\sqrt{2} a b$"
      ],
      "text/plain": [
       "Eq(2*a*b*cos(C), sqrt(2)*a*b)"
      ]
     },
     "execution_count": 255,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2.subs(a**2+b**2-c**2,replace)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{\\pi}{4}\\right\\}$"
      ],
      "text/plain": [
       "{pi/4}"
      ]
     },
     "execution_count": 256,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_,C,Interval.open(0,pi))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{\\pi}{3}\\right\\}$"
      ],
      "text/plain": [
       "{pi/3}"
      ]
     },
     "execution_count": 257,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq1.subs(C,pi/4),B,Interval.open(0,pi))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{5 \\pi}{12}$"
      ],
      "text/plain": [
       "5*pi/12"
      ]
     },
     "execution_count": 258,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pi-pi/4-pi/3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [],
   "source": [
    "from excel_function_package.trig import rad2deg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "metadata": {},
   "outputs": [],
   "source": [
    "tri=Triangle(asa=(rad2deg(5*pi/12),c,rad2deg(pi/3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 264,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{c^{2} \\left(\\sqrt{3} + 3\\right)}{8}$"
      ],
      "text/plain": [
       "c**2*(sqrt(3) + 3)/8"
      ]
     },
     "execution_count": 264,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tri.area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 265,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{2 \\sqrt{2}\\right\\}$"
      ],
      "text/plain": [
       "{2*sqrt(2)}"
      ]
     },
     "execution_count": 265,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_-(3+sqrt(3)),c,Interval.open(0,oo))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 266,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 15. (1) pi/3 (2) 2*sqrt(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 267,
   "metadata": {},
   "outputs": [],
   "source": [
    "ellip=Ellipse(Point(0,0),a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 268,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\frac{y^{2}}{b^{2}} + \\frac{x^{2}}{a^{2}}$"
      ],
      "text/plain": [
       "-1 + y**2/b**2 + x**2/a**2"
      ]
     },
     "execution_count": 268,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ellip.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 269,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=Point(0,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 270,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(3,3/S(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 271,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, 3\\right)$"
      ],
      "text/plain": [
       "Point2D(0, 3)"
      ]
     },
     "execution_count": 271,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 272,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(3, \\frac{3}{2}\\right)$"
      ],
      "text/plain": [
       "Point2D(3, 3/2)"
      ]
     },
     "execution_count": 272,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 277,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( - 2 \\sqrt{3}, \\  -3\\right), \\left( - 2 \\sqrt{3}, \\  3\\right), \\left( 2 \\sqrt{3}, \\  -3\\right), \\left( 2 \\sqrt{3}, \\  3\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(-2*sqrt(3), -3), (-2*sqrt(3), 3), (2*sqrt(3), -3), (2*sqrt(3), 3)}"
      ]
     },
     "execution_count": 277,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([ellip.equation(x,y).subs(dict(zip((x,y),A))),ellip.equation(x,y).subs(dict(zip((x,y),P)))],[a,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 278,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 2 \\sqrt{3}, \\  3\\right)$"
      ],
      "text/plain": [
       "(2*sqrt(3), 3)"
      ]
     },
     "execution_count": 278,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(_)[3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 279,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=dict(zip((a,b),_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 280,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{a: 2*sqrt(3), b: 3}"
      ]
     },
     "execution_count": 280,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 281,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{a^{2} - b^{2}}}{a}$"
      ],
      "text/plain": [
       "sqrt(a**2 - b**2)/a"
      ]
     },
     "execution_count": 281,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ellip.eccentricity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 282,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{2}$"
      ],
      "text/plain": [
       "1/2"
      ]
     },
     "execution_count": 282,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.subs(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 284,
   "metadata": {},
   "outputs": [],
   "source": [
    "k = symbols(\"k\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 285,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 285,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k in Reals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 286,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(P,slope=k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 287,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - k x + 3 k + y - \\frac{3}{2}$"
      ],
      "text/plain": [
       "-k*x + 3*k + y - 3/2"
      ]
     },
     "execution_count": 287,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 571,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Ellipse(Point(0,0),sqrt(12),3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 291,
   "metadata": {},
   "outputs": [],
   "source": [
    "P,B=Intersection(l,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 292,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(3, \\frac{3}{2}\\right)$"
      ],
      "text/plain": [
       "Point2D(3, 3/2)"
      ]
     },
     "execution_count": 292,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 293,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{6 k - 3 + \\frac{2 \\left(- 12 k^{2} - 36 k + 9\\right)}{8 k^{2} + 6}}{2 k}, \\frac{- 12 k^{2} - 36 k + 9}{8 k^{2} + 6}\\right)$"
      ],
      "text/plain": [
       "Point2D((6*k - 3 + 2*(-12*k**2 - 36*k + 9)/(8*k**2 + 6))/(2*k), (-12*k**2 - 36*k + 9)/(8*k**2 + 6))"
      ]
     },
     "execution_count": 293,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 294,
   "metadata": {},
   "outputs": [],
   "source": [
    "tri=Triangle(A,B,P)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 295,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{9 \\cdot \\left(4 k^{2} + 8 k + 3\\right)}{2 \\cdot \\left(4 k^{2} + 3\\right)}$"
      ],
      "text/plain": [
       "9*(4*k**2 + 8*k + 3)/(2*(4*k**2 + 3))"
      ]
     },
     "execution_count": 295,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tri.area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 296,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{1}{2}, \\frac{3}{2}\\right\\}$"
      ],
      "text/plain": [
       "{1/2, 3/2}"
      ]
     },
     "execution_count": 296,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_-9,k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 298,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "p=plot_implicit(c.equation(x,y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 302,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer=[l.equation(x,y).subs(k,1/S(2)),l.equation(x,y).subs(k,3/S(2))]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 305,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{x - 2 y}{2}$"
      ],
      "text/plain": [
       "-(x - 2*y)/2"
      ]
     },
     "execution_count": 305,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(answer[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{3 x - 2 y - 6}{2}$"
      ],
      "text/plain": [
       "-(3*x - 2*y - 6)/2"
      ]
     },
     "execution_count": 306,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(answer[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 307,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 16. (1) 1/S(2) (2) x−2*y or 3*x−2*y−6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 421,
   "metadata": {},
   "outputs": [],
   "source": [
    "B=Point(0,0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 422,
   "metadata": {},
   "outputs": [],
   "source": [
    "C=Point(0,1,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 423,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=Point(sqrt(3),0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 427,
   "metadata": {},
   "outputs": [],
   "source": [
    "tri=Triangle(B,A,C)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 428,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Point2D(0, 0), Point2D(sqrt(3), 0), Point2D(0, 1))"
      ]
     },
     "execution_count": 428,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tri.vertices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 429,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(0,0,2)+A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 430,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(\\sqrt{3}, 0, 2\\right)$"
      ],
      "text/plain": [
       "Point3D(sqrt(3), 0, 2)"
      ]
     },
     "execution_count": 430,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 431,
   "metadata": {},
   "outputs": [],
   "source": [
    "prid=Pyramid(P,tri)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 432,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( \\operatorname{Point3D}\\left(\\sqrt{3}, 0, 2\\right), \\  \\operatorname{Point3D}\\left(0, 0, 0\\right), \\  \\operatorname{Point3D}\\left(\\sqrt{3}, 0, 0\\right), \\  \\operatorname{Point3D}\\left(0, 1, 0\\right)\\right)$"
      ],
      "text/plain": [
       "(Point3D(sqrt(3), 0, 2), Point3D(0, 0, 0), Point3D(sqrt(3), 0, 0), Point3D(0, 1, 0))"
      ]
     },
     "execution_count": 432,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prid.vertices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 433,
   "metadata": {},
   "outputs": [],
   "source": [
    "D=Point(x,y,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 434,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(x, y, 0\\right)$"
      ],
      "text/plain": [
       "Point3D(x, y, 0)"
      ]
     },
     "execution_count": 434,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 438,
   "metadata": {},
   "outputs": [],
   "source": [
    "vec_AD=Data(Line(A,D).direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 440,
   "metadata": {},
   "outputs": [],
   "source": [
    "vec_PB=Data(Line(P,B).direction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 442,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\sqrt{3}\\right\\}$"
      ],
      "text/plain": [
       "{sqrt(3)}"
      ]
     },
     "execution_count": 442,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(sum(vec_AD*vec_PB),x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 443,
   "metadata": {},
   "outputs": [],
   "source": [
    "plane=Plane(P,B,C)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 444,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 2, \\  0, \\  - \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "(2, 0, -sqrt(3))"
      ]
     },
     "execution_count": 444,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plane.normal_vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 445,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2*x - 2*sqrt(3), 0, 0]"
      ]
     },
     "execution_count": 445,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Data(_)*vec_AD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 446,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 446,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(_).subs(x,sqrt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 448,
   "metadata": {},
   "outputs": [],
   "source": [
    "D=Circle((A+C)/2,C.distance(A)/S(2)).arbitrary_point(t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 449,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\cos{\\left(t \\right)} + \\frac{\\sqrt{3}}{2}, \\sin{\\left(t \\right)} + \\frac{1}{2}\\right)$"
      ],
      "text/plain": [
       "Point2D(cos(t) + sqrt(3)/2, sin(t) + 1/2)"
      ]
     },
     "execution_count": 449,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 452,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{acos}{\\left(\\frac{2 \\sqrt{3} \\cdot \\left(2 \\cos{\\left(t \\right)} + \\sqrt{3}\\right) - 4 \\sin{\\left(t \\right)} + 2}{4 \\sqrt{\\left(1 - 2 \\sin{\\left(t \\right)}\\right)^{2} + \\left(2 \\cos{\\left(t \\right)} + \\sqrt{3}\\right)^{2} + \\left(\\sqrt{3} \\left(\\sin{\\left(t \\right)} - \\frac{1}{2}\\right) + \\cos{\\left(t \\right)} + \\frac{\\sqrt{3}}{2}\\right)^{2}}} \\right)}$"
      ],
      "text/plain": [
       "acos((2*sqrt(3)*(2*cos(t) + sqrt(3)) - 4*sin(t) + 2)/(4*sqrt((1 - 2*sin(t))**2 + (2*cos(t) + sqrt(3))**2 + (sqrt(3)*(sin(t) - 1/2) + cos(t) + sqrt(3)/2)**2)))"
      ]
     },
     "execution_count": 452,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Plane(C,P,A).angle_between(Plane(C,P,D))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 453,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{- \\frac{\\left(2 \\sqrt{3} \\cdot \\left(2 \\sin{\\left(t + \\frac{\\pi}{2} \\right)} + \\sqrt{3}\\right) - 4 \\sin{\\left(t \\right)} + 2\\right)^{2}}{16 \\left(\\left(1 - 2 \\sin{\\left(t \\right)}\\right)^{2} + \\left(2 \\sin{\\left(t + \\frac{\\pi}{2} \\right)} + \\sqrt{3}\\right)^{2} + \\left(\\sqrt{3} \\left(\\sin{\\left(t \\right)} - \\frac{1}{2}\\right) + \\sin{\\left(t + \\frac{\\pi}{2} \\right)} + \\frac{\\sqrt{3}}{2}\\right)^{2}\\right)} + 1}$"
      ],
      "text/plain": [
       "sqrt(-(2*sqrt(3)*(2*sin(t + pi/2) + sqrt(3)) - 4*sin(t) + 2)**2/(16*((1 - 2*sin(t))**2 + (2*sin(t + pi/2) + sqrt(3))**2 + (sqrt(3)*(sin(t) - 1/2) + sin(t + pi/2) + sqrt(3)/2)**2)) + 1)"
      ]
     },
     "execution_count": 453,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sin(_.rewrite(sin))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 454,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 458,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{2} \\sqrt{\\frac{1 - \\cos{\\left(2 x \\right)}}{4 \\cos{\\left(x \\right)} - \\cos{\\left(2 x \\right)} + 5}}$"
      ],
      "text/plain": [
       "sqrt(2)*sqrt((1 - cos(2*x))/(4*cos(x) - cos(2*x) + 5))"
      ]
     },
     "execution_count": 458,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check.subs({2*t+pi/3:2*x,t+pi/6:x})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 459,
   "metadata": {},
   "outputs": [],
   "source": [
    "check1=expand_trig(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 460,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{2} \\sqrt{\\frac{2 - 2 \\cos^{2}{\\left(x \\right)}}{- 2 \\cos^{2}{\\left(x \\right)} + 4 \\cos{\\left(x \\right)} + 6}}$"
      ],
      "text/plain": [
       "sqrt(2)*sqrt((2 - 2*cos(x)**2)/(-2*cos(x)**2 + 4*cos(x) + 6))"
      ]
     },
     "execution_count": 460,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 461,
   "metadata": {},
   "outputs": [],
   "source": [
    "check2=check1.subs(cos(x),y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 462,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{2} \\sqrt{\\frac{2 - 2 y^{2}}{- 2 y^{2} + 4 y + 6}}$"
      ],
      "text/plain": [
       "sqrt(2)*sqrt((2 - 2*y**2)/(-2*y**2 + 4*y + 6))"
      ]
     },
     "execution_count": 462,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 463,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- \\frac{1}{2}\\right\\}$"
      ],
      "text/plain": [
       "{-1/2}"
      ]
     },
     "execution_count": 463,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(check2-sqrt(42)/7,y,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 464,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\pi}{2}$"
      ],
      "text/plain": [
       "pi/2"
      ]
     },
     "execution_count": 464,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "acos(-1/S(2))-pi/6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 465,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{\\sqrt{3}}{2}, \\frac{3}{2}\\right)$"
      ],
      "text/plain": [
       "Point2D(sqrt(3)/2, 3/2)"
      ]
     },
     "execution_count": 465,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "D.subs(t,pi/2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 466,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/huangzhiming/anaconda3/lib/python3.11/site-packages/sympy/geometry/point.py:312: UserWarning: Dimension of (sqrt(3)/2, 3/2) needs to be changed from 2 to 3.\n",
      "  return [Point(i, **kwargs) for i in points]\n"
     ]
    },
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{3}$"
      ],
      "text/plain": [
       "sqrt(3)"
      ]
     },
     "execution_count": 466,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_.distance(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 470,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 17. （1）OK，（2）sqrt(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "a,b=symbols(\"a,b\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "x,y=symbols(\"x,y\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=ln(x/(2-x))+a*x+b*(x-1)**3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a x + b \\left(x - 1\\right)^{3} + \\log{\\left(\\frac{x}{2 - x} \\right)}$"
      ],
      "text/plain": [
       "a*x + b*(x - 1)**3 + log(x/(2 - x))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr1=expr.subs(b,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a x + \\log{\\left(\\frac{x}{2 - x} \\right)}$"
      ],
      "text/plain": [
       "a*x + log(x/(2 - x))"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a + \\frac{\\left(2 - x\\right) \\left(\\frac{x}{\\left(2 - x\\right)^{2}} + \\frac{1}{2 - x}\\right)}{x} \\geq 0$"
      ],
      "text/plain": [
       "a + (2 - x)*(x/(2 - x)**2 + 1/(2 - x))/x >= 0"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr1,x)>=0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(0, 2\\right)$"
      ],
      "text/plain": [
       "Interval.open(0, 2)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "continuous_domain(expr1.args[1],x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{\\left(x - 2\\right) \\left(\\frac{x}{\\left(x - 2\\right)^{2}} - \\frac{1}{x - 2}\\right)}{x}\\right\\}$"
      ],
      "text/plain": [
       "{(x - 2)*(x/(x - 2)**2 - 1/(x - 2))/x}"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(diff(expr1,x),a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, -2\\right]$"
      ],
      "text/plain": [
       "Interval(-oo, -2)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(list(_)[0],x,Interval.open(0,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 19. (1) -2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 6 b \\left(x - 1\\right) + \\frac{\\frac{x}{x - 2} - 1}{x \\left(x - 2\\right)} + \\frac{\\frac{x}{x - 2} - 1}{x^{2}}$"
      ],
      "text/plain": [
       "6*b*(x - 1) + (x/(x - 2) - 1)/(x*(x - 2)) + (x/(x - 2) - 1)/x**2"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,x,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 6 b x - 6 b + \\frac{4}{x \\left(x - 2\\right)^{2}} - \\frac{4}{x^{2} \\left(x - 2\\right)^{2}}$"
      ],
      "text/plain": [
       "6*b*x - 6*b + 4/(x*(x - 2)**2) - 4/(x**2*(x - 2)**2)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(\\mathbb{R} \\cap \\left\\{1, 1 - \\sqrt{1 - \\frac{\\sqrt{6} \\sqrt{- b}}{3 b}}, 1 - \\sqrt{1 + \\frac{\\sqrt{6} \\sqrt{- b}}{3 b}}, \\sqrt{1 - \\frac{\\sqrt{6} \\sqrt{- b}}{3 b}} + 1, \\sqrt{1 + \\frac{\\sqrt{6} \\sqrt{- b}}{3 b}} + 1\\right\\}\\right) \\setminus \\left\\{0, 2\\right\\}$"
      ],
      "text/plain": [
       "Complement(Intersection({1, 1 - sqrt(1 - sqrt(6)*sqrt(-b)/(3*b)), 1 - sqrt(1 + sqrt(6)*sqrt(-b)/(3*b)), sqrt(1 - sqrt(6)*sqrt(-b)/(3*b)) + 1, sqrt(1 + sqrt(6)*sqrt(-b)/(3*b)) + 1}, Reals), {0, 2})"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_,x,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a$"
      ],
      "text/plain": [
       "a"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_h=expr.subs(x,x+1)-a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a x + b x^{3} + \\log{\\left(\\frac{- x - 1}{x - 1} \\right)}$"
      ],
      "text/plain": [
       "a*x + b*x**3 + log((-x - 1)/(x - 1))"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(expr_h)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_is_odd(expr_h,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(1, a\\right)$"
      ],
      "text/plain": [
       "Point2D(1, a)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Point(1,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 19. (2) OK"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle a$"
      ],
      "text/plain": [
       "a"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr.subs(x,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_end=expr.subs(a,-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle b \\left(x - 1\\right)^{3} - 2 x + \\log{\\left(\\frac{x}{2 - x} \\right)}$"
      ],
      "text/plain": [
       "b*(x - 1)**3 - 2*x + log(x/(2 - x))"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 b \\left(x - 1\\right)^{2} - 2 + \\frac{\\left(2 - x\\right) \\left(\\frac{x}{\\left(2 - x\\right)^{2}} + \\frac{1}{2 - x}\\right)}{x}$"
      ],
      "text/plain": [
       "3*b*(x - 1)**2 - 2 + (2 - x)*(x/(2 - x)**2 + 1/(2 - x))/x"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr_end,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\left(x - 1\\right)^{2} \\cdot \\left(3 b x^{2} - 6 b x - 2\\right)}{x \\left(x - 2\\right)}$"
      ],
      "text/plain": [
       "(x - 1)**2*(3*b*x**2 - 6*b*x - 2)/(x*(x - 2))"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_end,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{t^{2} \\cdot \\left(3 b t^{2} - 3 b - 2\\right)}{\\left(t - 1\\right) \\left(t + 1\\right)}$"
      ],
      "text/plain": [
       "t**2*(3*b*t**2 - 3*b - 2)/((t - 1)*(t + 1))"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(_.subs(x,t+1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=fraction(_)[0].args[1]*-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 3 b x^{2} + 6 b x + 2$"
      ],
      "text/plain": [
       "-3*b*x**2 + 6*b*x + 2"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{2}{3 x \\left(x - 2\\right)}\\right\\}$"
      ],
      "text/plain": [
       "{2/(3*x*(x - 2))}"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(check,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-\\infty, - \\frac{2}{3}\\right]$"
      ],
      "text/plain": [
       "Interval(-oo, -2/3)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(list(_)[0],x,Interval.open(0,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2$"
      ],
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(check.subs(b,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{1 - \\frac{\\sqrt{3} \\sqrt{b \\left(3 b + 2\\right)}}{3 b}, 1 + \\frac{\\sqrt{3} \\sqrt{b \\left(3 b + 2\\right)}}{3 b}\\right\\}$"
      ],
      "text/plain": [
       "{1 - sqrt(3)*sqrt(b*(3*b + 2))/(3*b), 1 + sqrt(3)*sqrt(b*(3*b + 2))/(3*b)}"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(check,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\infty$"
      ],
      "text/plain": [
       "oo"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "limit(expr_end,x,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x121339590>"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr_end.args[0],expr_end.args[2],(x,0.1,1.9),axis_center=(1,-2),ylim=(-5,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\left(x - 1\\right) \\left(3 b x^{4} - 12 b x^{3} + 12 b x^{2} + 2\\right)}{x^{2} \\left(x - 2\\right)^{2}}$"
      ],
      "text/plain": [
       "2*(x - 1)*(3*b*x**4 - 12*b*x**3 + 12*b*x**2 + 2)/(x**2*(x - 2)**2)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(expr_end,x,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 19.(3) Interval(0,oo)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 新高考二卷"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 467,
   "metadata": {},
   "outputs": [],
   "source": [
    "E=Point(0,0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 468,
   "metadata": {},
   "outputs": [],
   "source": [
    "F=Point(2,0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 469,
   "metadata": {},
   "outputs": [],
   "source": [
    "D=Point(0,3*sqrt(3),0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 483,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(0,0,2*sqrt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 471,
   "metadata": {},
   "outputs": [],
   "source": [
    "G=Point(5,0,0)+D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 472,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(5, 3 \\sqrt{3}, 0\\right)$"
      ],
      "text/plain": [
       "Point3D(5, 3*sqrt(3), 0)"
      ]
     },
     "execution_count": 472,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "G"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 484,
   "metadata": {},
   "outputs": [],
   "source": [
    "pyramid=Pyramid(P,Polygon(E,F,G,D))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 485,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{acos}{\\left(\\frac{\\sqrt{65}}{65} \\right)}$"
      ],
      "text/plain": [
       "acos(sqrt(65)/65)"
      ]
     },
     "execution_count": 485,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyramid.side_planes[1].angle_between(pyramid.side_planes[2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 486,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{8 \\sqrt{65}}{65}$"
      ],
      "text/plain": [
       "8*sqrt(65)/65"
      ]
     },
     "execution_count": 486,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sin(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 488,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Plane}\\left(\\operatorname{Point3D}\\left(0, 0, 2 \\sqrt{3}\\right), \\left( 18, \\  - 6 \\sqrt{3}, \\  6 \\sqrt{3}\\right)\\right)$"
      ],
      "text/plain": [
       "Plane(Point3D(0, 0, 2*sqrt(3)), (18, -6*sqrt(3), 6*sqrt(3)))"
      ]
     },
     "execution_count": 488,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyramid.side_planes[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 489,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Plane}\\left(\\operatorname{Point3D}\\left(0, 0, 2 \\sqrt{3}\\right), \\left( 0, \\  10 \\sqrt{3}, \\  15 \\sqrt{3}\\right)\\right)$"
      ],
      "text/plain": [
       "Plane(Point3D(0, 0, 2*sqrt(3)), (0, 10*sqrt(3), 15*sqrt(3)))"
      ]
     },
     "execution_count": 489,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyramid.side_planes[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 495,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(2, 3, 4\\right)$"
      ],
      "text/plain": [
       "Point3D(2, 3, 4)"
      ]
     },
     "execution_count": 495,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Point(Data([2,3,4]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 496,
   "metadata": {},
   "outputs": [],
   "source": [
    "O=Point(0,0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 497,
   "metadata": {},
   "outputs": [],
   "source": [
    "B=Point(sqrt(3),0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 498,
   "metadata": {},
   "outputs": [],
   "source": [
    "M=Point(0,1,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 499,
   "metadata": {},
   "outputs": [],
   "source": [
    "F=Point(0,0,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 500,
   "metadata": {},
   "outputs": [],
   "source": [
    "E=F+2*M"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 501,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(0, 2, 3\\right)$"
      ],
      "text/plain": [
       "Point3D(0, 2, 3)"
      ]
     },
     "execution_count": 501,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 502,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{acos}{\\left(\\frac{11}{13} \\right)}$"
      ],
      "text/plain": [
       "acos(11/13)"
      ]
     },
     "execution_count": 502,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Plane(B,M,F).angle_between(Plane(B,M,E))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 503,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 \\sqrt{3}}{13}$"
      ],
      "text/plain": [
       "4*sqrt(3)/13"
      ]
     },
     "execution_count": 503,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sin(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 504,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 3, \\  3 \\sqrt{3}, \\  \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "(3, 3*sqrt(3), sqrt(3))"
      ]
     },
     "execution_count": 504,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Plane(B,M,F).normal_vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 505,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 3, \\  3 \\sqrt{3}, \\  - \\sqrt{3}\\right)$"
      ],
      "text/plain": [
       "(3, 3*sqrt(3), -sqrt(3))"
      ]
     },
     "execution_count": 505,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Plane(B,M,E).normal_vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 523,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(x+1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 524,
   "metadata": {},
   "outputs": [],
   "source": [
    "para=Parabola(Point(1,0),l)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 525,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 x - y^{2}$"
      ],
      "text/plain": [
       "4*x - y**2"
      ]
     },
     "execution_count": 525,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "para.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 526,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(t**2/4,t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 527,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{t^{2}}{4}, t\\right)$"
      ],
      "text/plain": [
       "Point2D(t**2/4, t)"
      ]
     },
     "execution_count": 527,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 528,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Circle(Point(0,4),1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 529,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{2} + \\left(y - 4\\right)^{2} - 1$"
      ],
      "text/plain": [
       "x**2 + (y - 4)**2 - 1"
      ]
     },
     "execution_count": 529,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 531,
   "metadata": {},
   "outputs": [],
   "source": [
    "l1,l2=c.tangent_lines(P)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 532,
   "metadata": {},
   "outputs": [],
   "source": [
    "Q,=Intersection(l1,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 534,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{4 t^{12} - 34 t^{11} + t^{10} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 204 t^{10} - 16 t^{9} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 2112 t^{9} + 81 t^{8} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 13888 t^{8} - 576 t^{7} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 59360 t^{7} + 4096 t^{6} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 285504 t^{6} - 16192 t^{5} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 1326592 t^{5} + 52224 t^{4} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 3863552 t^{4} - 160768 t^{3} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 5898240 t^{3} + 315392 t^{2} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 3686400 t^{2} - 245760 t \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + \\frac{\\left(4 t^{4} + t^{2} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 64 t^{2} - 496 t + 960\\right) \\left(- t^{12} + 8 t^{11} - 49 t^{10} + 2 t^{9} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 512 t^{9} - 8 t^{8} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 3280 t^{8} + 16 t^{7} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 13952 t^{7} - 192 t^{6} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 67824 t^{6} + 464 t^{5} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 311296 t^{5} + 4288 t^{4} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 885504 t^{4} - 40704 t^{3} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 1316864 t^{3} + 160768 t^{2} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 798720 t^{2} - 315392 t \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 245760 \\sqrt{t^{4} + 16 t^{2} - 128 t + 240}\\right)}{t^{4} + 16 t^{2} - 128 t + 256}}{4 \\left(- t^{5} + 4 t^{4} - 16 t^{3} + t^{2} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 192 t^{2} - 752 t + 960\\right) \\left(t^{6} - 8 t^{5} + 33 t^{4} - 2 t^{3} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} - 256 t^{3} + 8 t^{2} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 1520 t^{2} - 3968 t + 3840\\right)}, \\frac{4 t^{4} + t^{2} \\sqrt{t^{4} + 16 t^{2} - 128 t + 240} + 64 t^{2} - 496 t + 960}{t^{4} + 16 t^{2} - 128 t + 256}\\right)$"
      ],
      "text/plain": [
       "Point2D((4*t**12 - 34*t**11 + t**10*sqrt(t**4 + 16*t**2 - 128*t + 240) + 204*t**10 - 16*t**9*sqrt(t**4 + 16*t**2 - 128*t + 240) - 2112*t**9 + 81*t**8*sqrt(t**4 + 16*t**2 - 128*t + 240) + 13888*t**8 - 576*t**7*sqrt(t**4 + 16*t**2 - 128*t + 240) - 59360*t**7 + 4096*t**6*sqrt(t**4 + 16*t**2 - 128*t + 240) + 285504*t**6 - 16192*t**5*sqrt(t**4 + 16*t**2 - 128*t + 240) - 1326592*t**5 + 52224*t**4*sqrt(t**4 + 16*t**2 - 128*t + 240) + 3863552*t**4 - 160768*t**3*sqrt(t**4 + 16*t**2 - 128*t + 240) - 5898240*t**3 + 315392*t**2*sqrt(t**4 + 16*t**2 - 128*t + 240) + 3686400*t**2 - 245760*t*sqrt(t**4 + 16*t**2 - 128*t + 240) + (4*t**4 + t**2*sqrt(t**4 + 16*t**2 - 128*t + 240) + 64*t**2 - 496*t + 960)*(-t**12 + 8*t**11 - 49*t**10 + 2*t**9*sqrt(t**4 + 16*t**2 - 128*t + 240) + 512*t**9 - 8*t**8*sqrt(t**4 + 16*t**2 - 128*t + 240) - 3280*t**8 + 16*t**7*sqrt(t**4 + 16*t**2 - 128*t + 240) + 13952*t**7 - 192*t**6*sqrt(t**4 + 16*t**2 - 128*t + 240) - 67824*t**6 + 464*t**5*sqrt(t**4 + 16*t**2 - 128*t + 240) + 311296*t**5 + 4288*t**4*sqrt(t**4 + 16*t**2 - 128*t + 240) - 885504*t**4 - 40704*t**3*sqrt(t**4 + 16*t**2 - 128*t + 240) + 1316864*t**3 + 160768*t**2*sqrt(t**4 + 16*t**2 - 128*t + 240) - 798720*t**2 - 315392*t*sqrt(t**4 + 16*t**2 - 128*t + 240) + 245760*sqrt(t**4 + 16*t**2 - 128*t + 240))/(t**4 + 16*t**2 - 128*t + 256))/(4*(-t**5 + 4*t**4 - 16*t**3 + t**2*sqrt(t**4 + 16*t**2 - 128*t + 240) + 192*t**2 - 752*t + 960)*(t**6 - 8*t**5 + 33*t**4 - 2*t**3*sqrt(t**4 + 16*t**2 - 128*t + 240) - 256*t**3 + 8*t**2*sqrt(t**4 + 16*t**2 - 128*t + 240) + 1520*t**2 - 3968*t + 3840)), (4*t**4 + t**2*sqrt(t**4 + 16*t**2 - 128*t + 240) + 64*t**2 - 496*t + 960)/(t**4 + 16*t**2 - 128*t + 256))"
      ]
     },
     "execution_count": 534,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(Q)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 535,
   "metadata": {},
   "outputs": [],
   "source": [
    "B,=Intersection(l,l.perpendicular_line(P))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 536,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(-1, t\\right)$"
      ],
      "text/plain": [
       "Point2D(-1, t)"
      ]
     },
     "execution_count": 536,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 537,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\operatorname{Point2D}\\left(-1, 4\\right)\\right\\}$"
      ],
      "text/plain": [
       "{Point2D(-1, 4)}"
      ]
     },
     "execution_count": 537,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Intersection(l,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 539,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=c.center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 541,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{t^{2} \\cdot \\left(4 - t\\right)}{4} - t + 4$"
      ],
      "text/plain": [
       "t**2*(4 - t)/4 - t + 4"
      ]
     },
     "execution_count": 541,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Line(A,B).equation(x,y).subs(dict(zip((x,y),P)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 542,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{4, - 2 i, 2 i\\right\\}$"
      ],
      "text/plain": [
       "{4, -2*I, 2*I}"
      ]
     },
     "execution_count": 542,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 543,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{15}$"
      ],
      "text/plain": [
       "sqrt(15)"
      ]
     },
     "execution_count": 543,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P.distance(Q).subs(t,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 544,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{\\left(\\frac{t^{2}}{4} + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "sqrt((t**2/4 + 1)**2)"
      ]
     },
     "execution_count": 544,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P.distance(B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 545,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{-2, 2\\right\\}$"
      ],
      "text/plain": [
       "{-2, 2}"
      ]
     },
     "execution_count": 545,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_-2,t,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 546,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 \\cdot \\left(4 - t\\right) \\left(t - 4\\right)}{t^{2}}$"
      ],
      "text/plain": [
       "4*(4 - t)*(t - 4)/t**2"
      ]
     },
     "execution_count": 546,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Line(P,A).slope*Line(B,A).slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 547,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{\\frac{t^{4}}{16} + \\left(t - 4\\right)^{2}} - \\sqrt{\\left(\\frac{t^{2}}{4} + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "sqrt(t**4/16 + (t - 4)**2) - sqrt((t**2/4 + 1)**2)"
      ]
     },
     "execution_count": 547,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P.distance(A)-P.distance(B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 548,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{8 - \\sqrt{34}, \\sqrt{34} + 8\\right\\}$"
      ],
      "text/plain": [
       "{8 - sqrt(34), sqrt(34) + 8}"
      ]
     },
     "execution_count": 548,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_,t,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 554,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Circle(Point(0,-2),sqrt(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 555,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{2} + y^{2} + 4 y - 1$"
      ],
      "text/plain": [
       "x**2 + y**2 + 4*y - 1"
      ]
     },
     "execution_count": 555,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(c.equation())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 558,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(a*x+(a+b)/2*y+b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 568,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 a x + a y + b y + 2 b}{a + b}$"
      ],
      "text/plain": [
       "(2*a*x + a*y + b*y + 2*b)/(a + b)"
      ]
     },
     "execution_count": 568,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(l.equation())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 560,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B=Intersection(l,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 561,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{\\frac{16 a^{2} \\cdot \\left(21 a^{2} + 10 a b + 5 b^{2}\\right)}{\\left(5 a^{2} + 2 a b + b^{2}\\right)^{2}} + \\left(- \\frac{2 b + \\left(a + b\\right) \\left(- \\frac{2 a \\sqrt{21 a^{2} + 10 a b + 5 b^{2}}}{5 a^{2} + 2 a b + b^{2}} - \\frac{2 \\cdot \\left(4 a^{2} + a b + b^{2}\\right)}{5 a^{2} + 2 a b + b^{2}}\\right)}{2 a} + \\frac{2 b + \\left(a + b\\right) \\left(\\frac{2 a \\sqrt{21 a^{2} + 10 a b + 5 b^{2}}}{5 a^{2} + 2 a b + b^{2}} - \\frac{2 \\cdot \\left(4 a^{2} + a b + b^{2}\\right)}{5 a^{2} + 2 a b + b^{2}}\\right)}{2 a}\\right)^{2}}$"
      ],
      "text/plain": [
       "sqrt(16*a**2*(21*a**2 + 10*a*b + 5*b**2)/(5*a**2 + 2*a*b + b**2)**2 + (-(2*b + (a + b)*(-2*a*sqrt(21*a**2 + 10*a*b + 5*b**2)/(5*a**2 + 2*a*b + b**2) - 2*(4*a**2 + a*b + b**2)/(5*a**2 + 2*a*b + b**2)))/(2*a) + (2*b + (a + b)*(2*a*sqrt(21*a**2 + 10*a*b + 5*b**2)/(5*a**2 + 2*a*b + b**2) - 2*(4*a**2 + a*b + b**2)/(5*a**2 + 2*a*b + b**2)))/(2*a))**2)"
      ]
     },
     "execution_count": 561,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A.distance(B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 562,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 563,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 \\sqrt{\\frac{21 a^{2} + 10 a b + 5 b^{2}}{\\left(5 a^{2} + 2 a b + b^{2}\\right)^{2}}} \\sqrt{4 a^{2} + \\left(a + b\\right)^{2}}$"
      ],
      "text/plain": [
       "2*sqrt((21*a**2 + 10*a*b + 5*b**2)/(5*a**2 + 2*a*b + b**2)**2)*sqrt(4*a**2 + (a + b)**2)"
      ]
     },
     "execution_count": 563,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 569,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 \\cdot \\left(5 t^{2} + 10 t + 21\\right)}{t^{2} + 2 t + 5}$"
      ],
      "text/plain": [
       "4*(5*t**2 + 10*t + 21)/(t**2 + 2*t + 5)"
      ]
     },
     "execution_count": 569,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(check**2).subs({a:1,b:t})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 570,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[16, 20\\right)$"
      ],
      "text/plain": [
       "Interval.Ropen(16, 20)"
      ]
     },
     "execution_count": 570,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(_,t,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 365,
   "metadata": {},
   "outputs": [],
   "source": [
    "bottom_down=RegularPolygon(Point(0,0),sqrt(12),3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 367,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 6$"
      ],
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 367,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bottom_down.sides[0].length"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 389,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 9 \\sqrt{3}$"
      ],
      "text/plain": [
       "9*sqrt(3)"
      ]
     },
     "execution_count": 389,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bottom_down.area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 404,
   "metadata": {},
   "outputs": [],
   "source": [
    "bottom_up=RegularPolygon(Point(0,0),sqrt(4/S(3)),3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 405,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Point2D(2*sqrt(3)/3, 0), Point2D(-sqrt(3)/3, 1), Point2D(-sqrt(3)/3, -1)]"
      ]
     },
     "execution_count": 405,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bottom_up.vertices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 373,
   "metadata": {},
   "outputs": [],
   "source": [
    "h=symbols(\"h\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 407,
   "metadata": {},
   "outputs": [],
   "source": [
    "frustum=Frustum(bottom_up,bottom_down,h)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 411,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{13 \\sqrt{3} h}{3}$"
      ],
      "text/plain": [
       "13*sqrt(3)*h/3"
      ]
     },
     "execution_count": 411,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frustum.volume"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 412,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{4 \\sqrt{3}}{3}\\right\\}$"
      ],
      "text/plain": [
       "{4*sqrt(3)/3}"
      ]
     },
     "execution_count": 412,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_-52/S(3),h,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 413,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B,C,A1,B1,C1=frustum.vertices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 414,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(\\frac{2 \\sqrt{3}}{3}, 0, h\\right)$"
      ],
      "text/plain": [
       "Point3D(2*sqrt(3)/3, 0, h)"
      ]
     },
     "execution_count": 414,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 416,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point3D}\\left(2 \\sqrt{3}, 0, 0\\right)$"
      ],
      "text/plain": [
       "Point3D(2*sqrt(3), 0, 0)"
      ]
     },
     "execution_count": 416,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 417,
   "metadata": {},
   "outputs": [],
   "source": [
    "plane=frustum.bottom_planes[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 418,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Plane}\\left(\\operatorname{Point3D}\\left(2 \\sqrt{3}, 0, 0\\right), \\left( 0, \\  0, \\  18 \\sqrt{3}\\right)\\right)$"
      ],
      "text/plain": [
       "Plane(Point3D(2*sqrt(3), 0, 0), (0, 0, 18*sqrt(3)))"
      ]
     },
     "execution_count": 418,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plane"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 420,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\pi}{4}$"
      ],
      "text/plain": [
       "-pi/4"
      ]
     },
     "execution_count": 420,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plane.angle_between(Line(A,A1)).subs(h,4/sqrt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 585,
   "metadata": {},
   "outputs": [],
   "source": [
    "a,b=symbols(\"a,b\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 586,
   "metadata": {},
   "outputs": [],
   "source": [
    "ellip=Ellipse(Point(0,0),a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 587,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\frac{y^{2}}{b^{2}} + \\frac{x^{2}}{a^{2}}$"
      ],
      "text/plain": [
       "-1 + y**2/b**2 + x**2/a**2"
      ]
     },
     "execution_count": 587,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ellip.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 588,
   "metadata": {},
   "outputs": [],
   "source": [
    "M=Point(1,3/S(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 589,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(1, \\frac{3}{2}\\right)$"
      ],
      "text/plain": [
       "Point2D(1, 3/2)"
      ]
     },
     "execution_count": 589,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "M"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 590,
   "metadata": {},
   "outputs": [],
   "source": [
    "F=ellip.foci[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 591,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\sqrt{a^{2} - b^{2}}, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(sqrt(a**2 - b**2), 0)"
      ]
     },
     "execution_count": 591,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 593,
   "metadata": {},
   "outputs": [],
   "source": [
    "answers=nonlinsolve([ellip.equation(x,y).subs(dict(zip((x,y),M))),F.x-M.x],[a,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 597,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=dict(zip((a,b),list(answers)[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 598,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{a: 2, b: sqrt(3)}"
      ]
     },
     "execution_count": 598,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 599,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{4} + \\frac{y^{2}}{3} - 1$"
      ],
      "text/plain": [
       "x**2/4 + y**2/3 - 1"
      ]
     },
     "execution_count": 599,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ellip.equation().subs(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 600,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(4,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 602,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(P,slope=k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 604,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Ellipse(Point(0,0),2,sqrt(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 605,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B=Intersection(l,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 621,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 32 k^{2} x + x^{2} \\cdot \\left(4 k^{2} + 3\\right) + 4 \\cdot \\left(16 k^{2} - 3\\right)$"
      ],
      "text/plain": [
       "-32*k**2*x + x**2*(4*k**2 + 3) + 4*(16*k**2 - 3)"
      ]
     },
     "execution_count": 621,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "line_and_quadratic(l,c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 622,
   "metadata": {},
   "outputs": [],
   "source": [
    "q=QuadraticFunction(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 624,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(- \\frac{1}{2}, \\frac{1}{2}\\right)$"
      ],
      "text/plain": [
       "Interval.open(-1/2, 1/2)"
      ]
     },
     "execution_count": 624,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(q.delta>0,k,Reals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 626,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{32 k^{2}}{4 k^{2} + 3}$"
      ],
      "text/plain": [
       "32*k**2/(4*k**2 + 3)"
      ]
     },
     "execution_count": 626,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(q.roots)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 628,
   "metadata": {},
   "outputs": [],
   "source": [
    "x1,x2=q.roots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 631,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 \\cdot \\left(16 k^{2} - 3\\right)}{4 k^{2} + 3}$"
      ],
      "text/plain": [
       "4*(16*k**2 - 3)/(4*k**2 + 3)"
      ]
     },
     "execution_count": 631,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(x1*x2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 606,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{- \\frac{6 k \\sqrt{- \\left(2 k - 1\\right) \\left(2 k + 1\\right)}}{4 k^{2} + 3} + 4 k - \\frac{12 k}{4 k^{2} + 3}}{k}, - \\frac{6 k \\sqrt{- \\left(2 k - 1\\right) \\left(2 k + 1\\right)}}{4 k^{2} + 3} - \\frac{12 k}{4 k^{2} + 3}\\right)$"
      ],
      "text/plain": [
       "Point2D((-6*k*sqrt(-(2*k - 1)*(2*k + 1))/(4*k**2 + 3) + 4*k - 12*k/(4*k**2 + 3))/k, -6*k*sqrt(-(2*k - 1)*(2*k + 1))/(4*k**2 + 3) - 12*k/(4*k**2 + 3))"
      ]
     },
     "execution_count": 606,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 607,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{\\frac{6 k \\sqrt{- \\left(2 k - 1\\right) \\left(2 k + 1\\right)}}{4 k^{2} + 3} + 4 k - \\frac{12 k}{4 k^{2} + 3}}{k}, \\frac{6 k \\sqrt{- \\left(2 k - 1\\right) \\left(2 k + 1\\right)}}{4 k^{2} + 3} - \\frac{12 k}{4 k^{2} + 3}\\right)$"
      ],
      "text/plain": [
       "Point2D((6*k*sqrt(-(2*k - 1)*(2*k + 1))/(4*k**2 + 3) + 4*k - 12*k/(4*k**2 + 3))/k, 6*k*sqrt(-(2*k - 1)*(2*k + 1))/(4*k**2 + 3) - 12*k/(4*k**2 + 3))"
      ]
     },
     "execution_count": 607,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 610,
   "metadata": {},
   "outputs": [],
   "source": [
    "N=(F+P)/2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 632,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{5}{2}, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(5/2, 0)"
      ]
     },
     "execution_count": 632,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N.subs(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 618,
   "metadata": {},
   "outputs": [],
   "source": [
    "Q,=Intersection(Line(N.subs(data),B),Line(M,F.subs(data)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 619,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(1, \\frac{6 k \\left(2 - \\sqrt{1 - 4 k^{2}}\\right)}{4 k^{2} + 4 \\sqrt{1 - 4 k^{2}} - 5}\\right)$"
      ],
      "text/plain": [
       "Point2D(1, 6*k*(2 - sqrt(1 - 4*k**2))/(4*k**2 + 4*sqrt(1 - 4*k**2) - 5))"
      ]
     },
     "execution_count": 619,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Q"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 620,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 620,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Line(A,Q).slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "m=symbols(\"m\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "hyper=Hyperbola(Point(0,0),sqrt(m),sqrt(m))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\frac{x^{2}}{m} - \\frac{y^{2}}{m}$"
      ],
      "text/plain": [
       "-1 + x**2/m - y**2/m"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "P1=Point(5,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 + \\frac{9}{m}$"
      ],
      "text/plain": [
       "-1 + 9/m"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.equation(x,y).subs(dict(zip((x,y),P1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Hyperbola(Point(0,0),3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{9} - \\frac{y^{2}}{9} - 1$"
      ],
      "text/plain": [
       "x**2/9 - y**2/9 - 1"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P1 in c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def next_point(p,k=k):\n",
    "    p1,p2=Intersection(Line(p,slope=k),c)\n",
    "    if(Eq(simplify(p1),p)):\n",
    "        return simplify(Point(-p2.x,p2.y))\n",
    "    else:\n",
    "        return simplify(Point(-p1.x,p1.y))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "P2=next_point(P1,k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(3, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(3, 0)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P2.subs(k,1/S(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{- k - 1}{k - 1}$"
      ],
      "text/plain": [
       "(-k - 1)/(k - 1)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(P2.x-P2.y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "x0,y0=symbols(\"x0,y0\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(x0,y0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(x_{0}, y_{0}\\right)$"
      ],
      "text/plain": [
       "Point2D(x0, y0)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(P,slope=k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 k x \\left(k x_{0} - y_{0}\\right) + x^{2} \\left(k - 1\\right) \\left(k + 1\\right) + \\left(k^{2} x_{0}^{2} - 2 k x_{0} y_{0} + y_{0}^{2} + 9\\right)$"
      ],
      "text/plain": [
       "-2*k*x*(k*x0 - y0) + x**2*(k - 1)*(k + 1) + (k**2*x0**2 - 2*k*x0*y0 + y0**2 + 9)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "line_and_quadratic(l,c)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "qx=QuadraticFunction(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "data={x0:sqrt(9+y0**2)}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\sqrt{k^{2} x_{0}^{2} - 9 k^{2} - 2 k x_{0} y_{0} + y_{0}^{2} + 9}}{k^{2} - 1}$"
      ],
      "text/plain": [
       "2*sqrt(k**2*x0**2 - 9*k**2 - 2*k*x0*y0 + y0**2 + 9)/(k**2 - 1)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(qx.roots)[0]-list(qx.roots)[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "check1=_.subs(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\sqrt{k^{2} y_{0}^{2} - 2 k y_{0} \\sqrt{y_{0}^{2} + 9} + y_{0}^{2} + 9}}{\\left(k - 1\\right) \\left(k + 1\\right)}$"
      ],
      "text/plain": [
       "2*sqrt(k**2*y0**2 - 2*k*y0*sqrt(y0**2 + 9) + y0**2 + 9)/((k - 1)*(k + 1))"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(simplify(check1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - y^{2} \\left(k - 1\\right) \\left(k + 1\\right) + 2 y \\left(k x_{0} - y_{0}\\right) + \\left(k x_{0} - 3 k - y_{0}\\right) \\left(k x_{0} + 3 k - y_{0}\\right)$"
      ],
      "text/plain": [
       "-y**2*(k - 1)*(k + 1) + 2*y*(k*x0 - y0) + (k*x0 - 3*k - y0)*(k*x0 + 3*k - y0)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "line_and_quadratic(l,c,x,y,first=False)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "qy=QuadraticFunction(_,x=y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\left(k x_{0} - y_{0}\\right)}{\\left(k - 1\\right) \\left(k + 1\\right)}$"
      ],
      "text/plain": [
       "2*(k*x0 - y0)/((k - 1)*(k + 1))"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(qy.roots)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "y1=_-y0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - y_{0} + \\frac{2 \\left(k x_{0} - y_{0}\\right)}{\\left(k - 1\\right) \\left(k + 1\\right)}$"
      ],
      "text/plain": [
       "-y0 + 2*(k*x0 - y0)/((k - 1)*(k + 1))"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "x1=2*(x0-k*y0)/(1-k**2)-x0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - x_{0} + \\frac{- 2 k y_{0} + 2 x_{0}}{1 - k^{2}}$"
      ],
      "text/plain": [
       "-x0 + (-2*k*y0 + 2*x0)/(1 - k**2)"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\left(k + 1\\right) \\left(x_{0} - y_{0}\\right)}{k - 1}$"
      ],
      "text/plain": [
       "-(k + 1)*(x0 - y0)/(k - 1)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(x1-y1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_x=x1.subs({x0:x,y0:y})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - x + \\frac{- 2 k y + 2 x}{1 - k^{2}}$"
      ],
      "text/plain": [
       "-x + (-2*k*y + 2*x)/(1 - k**2)"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr_y=y1.subs({x0:x,y0:y})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - y + \\frac{2 \\left(k x - y\\right)}{\\left(k - 1\\right) \\left(k + 1\\right)}$"
      ],
      "text/plain": [
       "-y + 2*(k*x - y)/((k - 1)*(k + 1))"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "x2=expr_x.subs({x:x1,y:y1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "y2=expr_y.subs({x:x1,y:y1})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x_{0} - \\frac{- 2 k y_{0} + 2 x_{0}}{1 - k^{2}} + \\frac{- 2 k \\left(- y_{0} + \\frac{2 \\left(k x_{0} - y_{0}\\right)}{\\left(k - 1\\right) \\left(k + 1\\right)}\\right) - 2 x_{0} + \\frac{2 \\left(- 2 k y_{0} + 2 x_{0}\\right)}{1 - k^{2}}}{1 - k^{2}}$"
      ],
      "text/plain": [
       "x0 - (-2*k*y0 + 2*x0)/(1 - k**2) + (-2*k*(-y0 + 2*(k*x0 - y0)/((k - 1)*(k + 1))) - 2*x0 + 2*(-2*k*y0 + 2*x0)/(1 - k**2))/(1 - k**2)"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle y_{0} - \\frac{2 \\left(k x_{0} - y_{0}\\right)}{\\left(k - 1\\right) \\left(k + 1\\right)} + \\frac{2 \\left(k \\left(- x_{0} + \\frac{- 2 k y_{0} + 2 x_{0}}{1 - k^{2}}\\right) + y_{0} - \\frac{2 \\left(k x_{0} - y_{0}\\right)}{\\left(k - 1\\right) \\left(k + 1\\right)}\\right)}{\\left(k - 1\\right) \\left(k + 1\\right)}$"
      ],
      "text/plain": [
       "y0 - 2*(k*x0 - y0)/((k - 1)*(k + 1)) + 2*(k*(-x0 + (-2*k*y0 + 2*x0)/(1 - k**2)) + y0 - 2*(k*x0 - y0)/((k - 1)*(k + 1)))/((k - 1)*(k + 1))"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "tri=Triangle(Point(x0,y0),Point(x1,y1),Point(x2,y2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4 k^{3} \\left(x_{0} - y_{0}\\right) \\left(x_{0} + y_{0}\\right)}{\\left(k - 1\\right)^{2} \\left(k + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "4*k**3*(x0 - y0)*(x0 + y0)/((k - 1)**2*(k + 1)**2)"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(tri.area)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2024年北京卷"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "M=Interval.Lopen(-4,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-4, 1\\right]$"
      ],
      "text/plain": [
       "Interval.Lopen(-4, 1)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "M"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "N=Interval.open(-1,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-1, 3\\right)$"
      ],
      "text/plain": [
       "Interval.open(-1, 3)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(-4, 3\\right)$"
      ],
      "text/plain": [
       "Interval.open(-4, 3)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "M|N"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1. A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(z/I,I-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - i z = -1 + i$"
      ],
      "text/plain": [
       "Eq(-I*z, -1 + I)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{- i \\left(1 - i\\right)\\right\\}$"
      ],
      "text/plain": [
       "{-I*(1 - I)}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(eq,z,Complexes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "answer,=_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -1 - i$"
      ],
      "text/plain": [
       "-1 - I"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(answer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "c=Circle(x**2+y**2-2*x+6*y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-2.79473319220206 -6.79473319220206 7.58946638440411 7.58946638440411\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,-6.00000000000000)\"><ellipse fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.151789327688082\" opacity=\"0.6\" cx=\"1.00000000000000\" cy=\"-3.00000000000000\" rx=\"3.16227766016838\" ry=\"3.16227766016838\"/></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Circle}\\left(\\operatorname{Point2D}\\left(1, -3\\right), \\sqrt{10}\\right)$"
      ],
      "text/plain": [
       "Circle(Point2D(1, -3), sqrt(10))"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "C=c.center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{10}$"
      ],
      "text/plain": [
       "sqrt(10)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.radius"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(1, -3\\right)$"
      ],
      "text/plain": [
       "Point2D(1, -3)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(x-y+2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "            xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "            width=\"100.0\" height=\"100.0\" viewBox=\"-0.100000000000000 1.90000000000000 1.20000000000000 1.20000000000000\"\n",
       "            preserveAspectRatio=\"xMinYMin meet\">\n",
       "            <defs>\n",
       "                <marker id=\"markerCircle\" markerWidth=\"8\" markerHeight=\"8\"\n",
       "                    refx=\"5\" refy=\"5\" markerUnits=\"strokeWidth\">\n",
       "                    <circle cx=\"5\" cy=\"5\" r=\"1.5\" style=\"stroke: none; fill:#000000;\"/>\n",
       "                </marker>\n",
       "                <marker id=\"markerArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"2\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M2,2 L2,6 L6,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "                <marker id=\"markerReverseArrow\" markerWidth=\"13\" markerHeight=\"13\" refx=\"6\" refy=\"4\"\n",
       "                       orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "                    <path d=\"M6,2 L6,6 L2,4\" style=\"fill: #000000;\" />\n",
       "                </marker>\n",
       "            </defs><g transform=\"matrix(1,0,0,-1,0,5.00000000000000)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.0240000000000000\" opacity=\"0.6\" d=\"M 0,2.00000000000000 L 1.00000000000000,3.00000000000000\" marker-start=\"url(#markerReverseArrow)\" marker-end=\"url(#markerArrow)\"/></g></svg>"
      ],
      "text/latex": [
       "$\\displaystyle \\operatorname{Line2D}\\left(\\operatorname{Point2D}\\left(0, 2\\right), \\operatorname{Point2D}\\left(1, 3\\right)\\right)$"
      ],
      "text/plain": [
       "Line2D(Point2D(0, 2), Point2D(1, 3))"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3 \\sqrt{2}$"
      ],
      "text/plain": [
       "3*sqrt(2)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C.distance(l)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 3. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=(x-sqrt(x))**4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left(- \\sqrt{x} + x\\right)^{4}$"
      ],
      "text/plain": [
       "(-sqrt(x) + x)**4"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 4 x^{\\frac{7}{2}} - 4 x^{\\frac{5}{2}} + x^{4} + 6 x^{3} + x^{2}$"
      ],
      "text/plain": [
       "-4*x**(7/2) - 4*x**(5/2) + x**4 + 6*x**3 + x**2"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand(expr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4. B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5. A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 6. B "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "k=symbols(\"k\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "d=k/ln(n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "n1,n2=symbols(\"n1:3\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "d1=d.subs(n,n1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{k}{\\log{\\left(n_{1} \\right)}}$"
      ],
      "text/plain": [
       "k/log(n1)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "d2=d.subs(n,n2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{k}{\\log{\\left(n_{2} \\right)}}$"
      ],
      "text/plain": [
       "k/log(n2)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\log{\\left(n_{2} \\right)}}{\\log{\\left(n_{1} \\right)}} < 1$"
      ],
      "text/plain": [
       "log(n2)/log(n1) < 1"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1/d2<1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "if n1<1,then k<0(S<1),n2>n1;\n",
    "else n1>1,then k>0(S>1),n2<n1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 7. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 8. D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=log(y,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\log{\\left(y \\right)}}{\\log{\\left(2 \\right)}}$"
      ],
      "text/plain": [
       "log(y)/log(2)"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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taWfFmhD0RFFhgTq0W9N8Pk/376wYsUKzZ8/X59//rmWL1+ulpYWzZkzR/X19WaPhi7k5+dr8eLFmjBhgtmj4Dg1NTU699xzFRQUpPfff1/bt2/X7373O8XExJg9Gtr85je/0fPPP69nnnlGO3bs0G9/+1s99thjevrpp80eza/V19dr4sSJeuaZZ7r8+G9/+1s98cQTeuaZZ5Sfn6+UlBTNnj3bnCOThh+aNm2acfvttxtOp9OQZDidTiM3N9e49957zR7tBHvLa42R979nZN3zT+OvXxSaPY5pysvLDUnGihUrzB4Fx6mtrTVGjBhhLF++3Jg5c6Zx5513mj0SjnHPPfcY5513ntljoAfz5s0zbr755k7PXXXVVcb1119v0kQ4niTjjTfe6Hjf4/EYKSkpxqOPPtrxXGNjoxEdHW08//zzAz6f3+0029TUpPXr12vOnDmdnp8zZ47WrFlj0lRda/UY+tnrm/3q8Gp3nE6nJCkuLs7kSXC8+fPna968ebrkkkvMHgVdePvtt5WXl6err75aSUlJmjx5spYsWWL2WDjGeeedp3//+9/avXu3JOnLL7/U6tWr9bWvfc3kydCdgoIClZWVdWqJkJAQzZw505SWOKV95gaDyspKtba2Kjk5udPzycnJKisrM2mqri39tEDrC2v86vBqVwzD0N13363zzjvPMhtS+4tXX31VGzZsUH5+vtmjoBv79+/Xc889p7vvvls///nPtXbtWv34xz9WSEiIvve975k9HiTdc889cjqdys3Nld1uV2trqx555BF95zvfMXs0dKO9F7pqicLCwgGfx+9irt3xYWQYhk/F0r6KOj32gfeE//vn+ffmwHfccYc2b96s1atXmz0KjlFcXKw777xTH374oUJDQ80eB93weDzKy8vTwoULJUmTJ0/Wtm3b9NxzzxFzPuK1117TSy+9pFdeeUVjx47Vpk2btGDBAqWmpurGG280ezz0wFdawu8OsyYkJMhut5+wCldeXn5CYZvFc9zh1Wv9+PDqj370I7399tv6+OOPlZ6ebvY4OMb69etVXl6uKVOmKDAwUIGBgVqxYoWeeuopBQYGqrW11ewRIWnIkCEaM2ZMp+dGjx7tsxd8+aOf/vSnuvfee3Xttddq/PjxuuGGG3TXXXdp0aJFZo+GbqSkpEiSz7SE38VccHCwpkyZouXLl3d6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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x128f97190>"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr,(y,0.1,10),ylim=(-5,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [],
   "source": [
    "y1,y2=symbols(\"y1:3\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\log{\\left(y_{1} \\right)}}{2 \\log{\\left(2 \\right)}} + \\frac{\\log{\\left(y_{2} \\right)}}{2 \\log{\\left(2 \\right)}} - \\frac{\\log{\\left(\\frac{y_{1}}{2} + \\frac{y_{2}}{2} \\right)}}{\\log{\\left(2 \\right)}}$"
      ],
      "text/plain": [
       "log(y1)/(2*log(2)) + log(y2)/(2*log(2)) - log(y1/2 + y2/2)/log(2)"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(expr.subs(y,y1)+expr.subs(y,y2))/2-expr.subs(y,(y1+y2)/2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=factor(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\log{\\left(y_{1} \\right)} + \\log{\\left(y_{2} \\right)} - 2 \\log{\\left(\\frac{y_{1}}{2} + \\frac{y_{2}}{2} \\right)}}{2 \\log{\\left(2 \\right)}}$"
      ],
      "text/plain": [
       "(log(y1) + log(y2) - 2*log(y1/2 + y2/2))/(2*log(2))"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\log{\\left(\\frac{y_{1} y_{2}}{\\left(\\frac{y_{1}}{2} + \\frac{y_{2}}{2}\\right)^{2}} \\right)}$"
      ],
      "text/plain": [
       "log(y1*y2/(y1/2 + y2/2)**2)"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logcombine(fraction(check)[0],force=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [],
   "source": [
    "check1=_.args[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{y_{1} y_{2}}{\\left(\\frac{y_{1}}{2} + \\frac{y_{2}}{2}\\right)^{2}}$"
      ],
      "text/plain": [
       "y1*y2/(y1/2 + y2/2)**2"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\left(y_{1} - y_{2}\\right)^{2}}{4}$"
      ],
      "text/plain": [
       "-(y1 - y2)**2/4"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(fraction(expand(check1))[0]-fraction(expand(check1))[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 9. A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = symbols(\"t\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=x+t*(x**2-x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle t \\left(x^{2} - x\\right) + x$"
      ],
      "text/plain": [
       "t*(x**2 - x) + x"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x^{2} - x$"
      ],
      "text/plain": [
       "x**2 - x"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr,t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAHTCAYAAACjhvVDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABg4klEQVR4nO3deXxU9b3/8ddkD5CFkIVkwg6ChC0DKqigiIAgW4Jba6latdJarXK9KtZfW9vb0nvtotaVulWp4pIJiyxCK5sIKmTYFwHZMkkIAbJC9vP748BgZE1IcmYm7+fjMQ/O+Z4zM585jIe3Z77n+7UZhmEgIiIiIj4nwOoCRERERKRhFOREREREfJSCnIiIiIiPUpATERER8VEKciIiIiI+SkFORERExEcpyImIiIj4qBYb5AzDoLi4GA2jJyIiIr6qxQa5kpISoqKiKCkpsboUERERkQZpsUFORERExNcpyImIiIj4KAU5ERERER+lICciIiLioxTkRERERHyUgpyIiIiIj1KQExEREfFRCnIiIiIiPkpBTkRERMRHKciJiIiI+CgFOREREREfpSAnIiIi4qMU5ERERER8lIKciIiIiI9SkBMRERHxUV4X5GbMmIHNZuORRx45734rVqxg4MCBhIWF0bVrV1599dXmKVBERETES3hVkPv666+ZOXMm/fr1O+9+e/fuZezYsQwdOhSXy8VTTz3Fww8/TEZGRjNVKiIiImI9rwlypaWl3HnnnfzjH/+gbdu259331VdfpWPHjjz33HNcfvnl3HffffzkJz/hz3/+czNVKyIiIi3Ol6/Boa1WV1GH1wS5Bx98kJtvvpkbb7zxgvuuWbOGUaNG1WkbPXo069ato6qq6qzPqaiooLi4uM5DRERE5KLsWw2LnoCZ18OxfVZX4+EVQW727NlkZWUxY8aMi9o/Ly+PhISEOm0JCQlUV1dTUFBw1ufMmDGDqKgoz6NDhw6XXLeIiIi0AOXFMGcqYEC/26FtZ6sr8rA8yB08eJBf/vKXzJo1i7CwsIt+ns1mq7NuGMZZ20+ZPn06RUVFnsfBgwcbXrSIiIi0HJ8+BYUHILoj3HRxF52aS5DVBaxfv578/HwGDhzoaaupqWHlypW8+OKLVFRUEBgYWOc57du3Jy8vr05bfn4+QUFBtGvX7qzvExoaSmhoaON/ABEREfFfOxaC613ABpNehdAIqyuqw/IgN2LECDZv3lyn7Z577qFXr1488cQTZ4Q4gCFDhjB//vw6bUuWLGHQoEEEBwc3ab0iIiLSQpQVwPyHzeWrfwGdr7G2nrOwPMhFRETQp0+fOm2tW7emXbt2nvbp06fjdrt55513AJg6dSovvvgi06ZN4/7772fNmjW88cYbvP/++81ev4iIiPghw4D5v4SywxDfG4Y/bXVFZ2V5H7mLkZuby4EDBzzrXbp0YeHChSxfvpwBAwbw+9//nhdeeIHJkydbWKWIiIj4jY2zYccnEBAMaa9B8MX3429ONuPUXQItTHFxMVFRURQVFREZGWl1OSIiIuItCg/CK1dDRTHc8P9g2GNWV3ROPnFFTkRERKRZ1NbCnJ+ZIS75CrjmEasrOi8FOREREZFTvnoN9q2C4FbmT6qBlt9OcF4KciIiIiIAh3fCv39rLo/6PbTrZmk5F0NBTkRERKSmCjIfgOpy6DYCBt1rdUUXRUFOREREZMX/Qo4LwqJh4otwjpmivI2CnIiIiLRsB76EVX8xl8f9DSKTrK2nHhTkREREpOWqKIHMn4JRC/1uhz7pVldULwpyIiIi0nItng7H9kFUBxj7rNXV1JuCnIiIiLRM2z8B17uADdJehbAoqyuqNwU5ERERaXlKDsH8h83lqx+CztdaW08DKciJiIhIy2IYMO8XcPwIJPSFG562uqIGU5ATERGRlmX9W7BrCQSGQvpMCAq1uqIGU5ATERGRlqNgN3z6K3P5xt9AQm9r67lECnIiIiLSMtRUmUONVB2HLtfBVT+zuqJLpiAnIiIiLcPKZ8G93rw7ddIrEOD7Mcj3P4GIiIjIhRz40gxyADf/FaLs1tbTSBTkRERExL+VF4PzvpOzN9wBfW+xuqJGoyAnIiIi/m3hf0PhAYju5JOzN5yPgpyIiIj4r80fw6bZYAswhxoJi7S6okalICciIiL+qfAgfDLNXB7239BxsLX1NAEFOREREfE/tTWQ+QBUFEHyFTDscasrahIKciIiIuJ/Vj8H+1dDSBvzJ9XAIKsrahIKciIiIuJf3Fmw7I/m8thnIaartfU0IQU5ERER8R+VZZBxH9RWQ0oa9P+B1RU1KQU5ERER8R+Lp8PRPRBph3F/A5vN6oqalIKciIiI+Ift8yHrn4AN0l6D8LZWV9TkFORERETE9xXnwLyHzOVrfgldhlpbTzNRkBMRERHfVlsDzp/CiWOQOACG/8rqipqNgpyIiIj4ttXPwb5VENwabnkTgkKsrqjZKMiJiIiI78peB5/9wVwe+yy062ZtPc1MQU5ERER8U3kxZNwLRg2kpMOAH1pdUbNTkBMRERHftPAxOLYPojq2iKFGzkZBTkRERHzPxg9g0wdgC4DJr0N4tNUVWUJBTkRERHzL0b2w4L/M5euehI5XWVuPhRTkRERExHfUVJn94ipLoOPVMOwxqyuylIKciIiI+I5lfwT3egiLgvSZEBBodUWWUpATERER3/DtCvj8b+by+BcguoO19XgBrwhyr7zyCv369SMyMpLIyEiGDBnCokWLzrn/8uXLsdlsZzx27NjRjFWLiIhIsyk9DM77AQMcP4aUSVZX5BWCrC4AIDk5mT/96U90794dgH/+859MnDgRl8tFSkrKOZ+3c+dOIiMjPetxcXFNXquIiIg0s9pamPMzKD0EsT3hpv+1uiKv4RVBbvz48XXW//CHP/DKK6+wdu3a8wa5+Ph4oqOjm7g6ERERsdTal2H3UggKg1vfgpBWVlfkNbzip9XvqqmpYfbs2ZSVlTFkyJDz7puamkpiYiIjRoxg2bJl5923oqKC4uLiOg8RERHxcu718O/fmss3zYCEc1/gaYm8Jsht3ryZNm3aEBoaytSpU8nMzKR3795n3TcxMZGZM2eSkZGB0+mkZ8+ejBgxgpUrV57z9WfMmEFUVJTn0aGDOkiKiIh4tfJi+PgnUFsFvSfCwHusrsjr2AzDMKwuAqCyspIDBw5QWFhIRkYGr7/+OitWrDhnmPu+8ePHY7PZmDdv3lm3V1RUUFFR4VkvLi6mQ4cOFBUV1elnJyIiIl7AMMzx4rZkmFNwTV3VYmdvOB+v6CMHEBIS4rnZYdCgQXz99dc8//zzvPbaaxf1/MGDBzNr1qxzbg8NDSU0NLRRahUREZEm5pplhjhbINzyhkLcOXjNT6vfZxhGnStoF+JyuUhMTGzCikRERKRZHN4Jix43l294GjpcaW09Xswrrsg99dRTjBkzhg4dOlBSUsLs2bNZvnw5ixcvBmD69Om43W7eeecdAJ577jk6d+5MSkoKlZWVzJo1i4yMDDIyMqz8GCIiInKpqk6Y/eKqjkPX6+GaR6yuyKt5RZA7dOgQU6ZMITc3l6ioKPr168fixYsZOXIkALm5uRw4cMCzf2VlJY899hhut5vw8HBSUlJYsGABY8eOteojiIiISGNY8jQc2gKt4yBtJgR47Y+HXsFrbnZobsXFxURFRelmBxEREW+xbR58OMVc/pETuo+wth4foJgrIiIi1is8APN+YS5f84hC3EVSkBMRERFr1VRBxn1QXgT2QeYNDnJRFORERETEWp/9Hg5+CaFR5lAjgcFWV+QzFORERETEOt8sgdXPm8sTX4S2nS0tx9coyImIiIg1ityQ+YC5fOUD0HuCtfX4IAU5ERERaX411eZ4cSeOQuIAGPV7qyvySQpyIiIi0vyW/Q8cXAuhkXDrWxCkaTQbQkFOREREmteuf8PnfzOXJ/wdYrpaW48PU5ATERGR5lOcA5k/NZevuA9SJllajq9TkBMREZHmUVMNH98Lx49A+34w6g9WV+TzFORERESkeSz/Ixz4AkIi4Na3ITjM6op8noKciIiINL3d/4ZVfzWXJzwP7bpZW4+fUJATERGRplWcC84HAAMG/QT6TLa6Ir+hICciIiJNp6YaMu6F4wWQ0BdGz7C6Ir+iICciIiJNZ9n/wP7V6hfXRBTkREREpGnsXHx6vLiJf4fY7tbW44cU5ERERKTxHdtfdx7VlDRr6/FTCnIiIiLSuKor4KO7obwQ7ANh1P9YXZHfUpATERGRxvXpryAnC8KizX5xQSFWV+S3FORERESk8WzJgK//YS6nz4TojtbW4+cU5ERERKRxFOyCeQ+by9dOg8tGW1tPC6AgJyIiIpeu8jh8+GOoLIVO18LwX1ldUYugICciIiKXxjBgwX9B/jZoHQ+3vAGBQVZX1SIoyImIiMilcb0LG98DWwDc8iZEtLe6ohZDQU5EREQaLm8zLPxvc3n4r6DLUGvraWEU5ERERKRhThTCB1Oguhy6jzRvcJBmpSAnIiIi9VdbC3N+Bsf2QlRHc6iRAMWK5qYjLiIiIvW3+m+wcyEEhsDt70CrGKsrapEU5ERERKR+vl0On52cdmvss5CUamk5LZmCnIiIiFy8Ijd8fC8YtTDgR+C4y+qKWjQFOREREbk41ZXw0V1wvADa94Wb/ww2m9VVtWgKciIiInJxlvwKsr+GsCi47V0IDre6ohZPQU5EREQubNNH8NVMczltJsR0sbYeARTkRERE5EIObYP5D5vLQx+DnjdZW494KMiJiIjIuZUXw4dToOo4dL0ehj9ldUXyHQpyIiIicnaGYQ76e2Q3RCbD5DcgINDqquQ7FORERETk7D7/K+z4xBz097Z/QutYqyuS7/GKIPfKK6/Qr18/IiMjiYyMZMiQISxatOi8z1mxYgUDBw4kLCyMrl278uqrrzZTtSIiIi3A7v/Af35vLo99FpIHWVuPnJVXBLnk5GT+9Kc/sW7dOtatW8cNN9zAxIkT2bp161n337t3L2PHjmXo0KG4XC6eeuopHn74YTIyMpq5chERET90bB9k3AsY4PgxDLzb4oLkXGyGYRhWF3E2MTExPPvss9x7771nbHviiSeYN28e27dv97RNnTqVjRs3smbNmot6/eLiYqKioigqKiIyMrLR6hYREfFplcfhzVGQtxmSHHDPIggOs7oqOQevuCL3XTU1NcyePZuysjKGDBly1n3WrFnDqFGj6rSNHj2adevWUVVVddbnVFRUUFxcXOchIiIi32EY8MmjZohrFQu3v6sQ5+W8Jsht3ryZNm3aEBoaytSpU8nMzKR3795n3TcvL4+EhIQ6bQkJCVRXV1NQUHDW58yYMYOoqCjPo0OHDo3+GURERHza16/DptlgC4Bb34KoZKsrkgvwmiDXs2dPNmzYwNq1a/nZz37GXXfdxbZt2865v+17c7ud+oX4++2nTJ8+naKiIs/j4MGDjVe8iIiIrzuwFhY/aS6P/B10GWZtPXJRgqwu4JSQkBC6d+8OwKBBg/j66695/vnnee21187Yt3379uTl5dVpy8/PJygoiHbt2p319UNDQwkNDW38wkVERHxdSR58+GOorYaUNBjyC6srkovkNVfkvs8wDCoqKs66bciQISxdurRO25IlSxg0aBDBwcHNUZ6IiIh/qK6ED++C0kMQdzlMeBHO8euWeB+vCHJPPfUUq1atYt++fWzevJlf/epXLF++nDvvvBMwfxb98Y9/7Nl/6tSp7N+/n2nTprF9+3befPNN3njjDR577DGrPoKIiIhv+vQpOLgWQqPgjn9BaBurK5J68IqfVg8dOsSUKVPIzc0lKiqKfv36sXjxYkaOHAlAbm4uBw4c8OzfpUsXFi5cyKOPPspLL71EUlISL7zwApMnT7bqI4iIiPierHfg63+Yy+mvQbtu1tYj9ea148g1NY0jJyIiLdrBr+HtsVBTCcN/Bdc9bnVF0gBe8dOqiIiINKOSPPhwihnieo2Doeqa5KsU5ERERFqS6gr4YAqU5EJcL0h7FQIUB3yV/uZERERakkWPQ/ZXJ29ueA9CI6yuSC6BgpyIiEhLse5NWP82YINb3tDNDX5AQU5ERKQl2L8GFp68oWHEr6HHSGvrkUahICciIuLvitwnZ26ogt6T4NpHra5IGomCnIiIiD+rKjfvUC3Lh/gUmPSyZm7wIwpyIiIi/sowYMF/gXs9hLc1Z24IaW11VdKIFORERET81ZevwoZZYAuAW96CmC5WVySNTEFORETEH+35zJxHFWDk76HbcGvrkSahICciIuJvjuyBj+4Boxb6/xCGPGh1RdJEFORERET8SXkxvP8DKC8E+yAY9zfd3ODHFORERET8RW0NOO+Hgp0QkWje3BAcZnVV0oQU5ERERPzFZ/8D3yyGwFAzxEW0t7oiaWIKciIiIv5g88fw+V/N5Ykvgn2gtfVIs1CQExER8XU5Lph78oaGa34J/W6zth5pNgpyIiIivqzkELz/Q6guhx6jYMRvrK5ImpGCnIiIiK+qKocP7oSSHGjXAya/DgGBVlclzUhBTkRExBcZBsx/GLK/hrAo+MFs809pURTkREREfNHnf4NNH4AtEG79J8R2t7oisYCCnIiIiK/ZsQD+8ztzecz/avqtFkxBTkRExJfkbYaM+wEDBt0LV95vdUViIQU5ERERX1Gab06/VVUGXa4zr8ZJi6YgJyIi4guqK+CDH0HRQYjpCre+DYHBVlclFlOQExER8XaGAfN/CQe/hNAo+MEH0CrG6qrECyjIiYiIeLvP/wob3z95h+pbEHeZ1RWJl1CQExER8WZb59S9Q7X7CEvLEe+iICciIuKt3Oshc6q5fNVU3aEqZ1CQExER8UZF2eYdqtUnoPtIGPUHqysSL6QgJyIi4m0qSuG9O6D0EMT3hlvehMAgq6sSL6QgJyIi4k1qayDjPji0GVrHwQ8/gLBIq6sSL6UgJyIi4k2W/hq+WQSBoXDH+xDd0eqKxIspyImIiHiL9W/DmhfN5UkvQ4crLC1HvJ+CnIiIiDf4djks+C9z+fqnoO8tlpYjvkFBTkRExGqHv4EPfwy11dD3VrjucasrEh+hICciImKl0sPwr1ugvAiSr4QJL4LNZnVV4iMU5ERERKxSdQJm/wAK90PbzvCD9yE4zOqqxId4RZCbMWMGV1xxBREREcTHxzNp0iR27tx53ucsX74cm812xmPHjh3NVLWIiMglqK2FzAcg+2sIi4Y7P4bWsVZXJT7GK4LcihUrePDBB1m7di1Lly6lurqaUaNGUVZWdsHn7ty5k9zcXM+jR48ezVCxiIjIJfrPM7BtLgQEwx3/glj9+yX15xXDRC9evLjO+ltvvUV8fDzr169n2LBh531ufHw80dHRTVidiIhII1v/Nqx+zlye+BJ0vtbKasSHecUVue8rKioCICYm5oL7pqamkpiYyIgRI1i2bNk596uoqKC4uLjOQ0REpNnt/g98Ms1cvn469L/d2nrEp3ldkDMMg2nTpnHttdfSp0+fc+6XmJjIzJkzycjIwOl00rNnT0aMGMHKlSvPuv+MGTOIioryPDp06NBUH0FEROTsDm2DD+8Cowb63QHXPWF1ReLjbIZhGFYX8V0PPvggCxYs4PPPPyc5Oblezx0/fjw2m4158+adsa2iooKKigrPenFxMR06dKCoqIjISM1hJyIiTawkD16/EYoOQqdrYYoTgkKtrkp8nFddkXvooYeYN28ey5Ytq3eIAxg8eDC7du0667bQ0FAiIyPrPERERJpFRQn861YzxLXrAbe/qxAnjcIrbnYwDIOHHnqIzMxMli9fTpcuXRr0Oi6Xi8TExEauTkRE5BLUVMFHd0PeJmgdB3d+BK0u3Adc5GJ4RZB78MEHee+995g7dy4RERHk5eUBEBUVRXh4OADTp0/H7XbzzjvvAPDcc8/RuXNnUlJSqKysZNasWWRkZJCRkWHZ5xAREanDMOCTR2H3vyG4FfzwA4hp2MUKkbPxiiD3yiuvAHD99dfXaX/rrbe4++67AcjNzeXAgQOebZWVlTz22GO43W7Cw8NJSUlhwYIFjB07trnKFhEROb+Vz4LrXbAFwC1vgX2g1RWJn/G6mx2aS3FxMVFRUbrZQUREmobrXzD35+byzX+FK+61th7xS151s4OIiIhf2P0fmP+wuXztowpx0mQU5ERERBpT3mZzrLjaauh7K9zwa6srEj+mICciItJYirLNYUYqS6DzUHP6rQD9UytNR98uERGRxnCiEGbdAiW5EHc53D5LY8VJk1OQExERuVTVFfDBj+DwdohINMeKC4+2uippARTkRERELkVtLcx9EPatgpA28MMPIVrzeUvzUJATERG5FEv/H2z+CAKC4LZ3ILGf1RVJC6IgJyIi0lBfvAhrXjSXJ74E3UdYW4+0OApyIiIiDbH5Y1jyK3P5xmeg/x3W1iMtkoKciIhIfe1ZBplTzeWrfgbX/NLaeqTFUpATERGpj9yN5h2qtVWQkgaj/wg2m9VVSQulICciInKxju41x4qrLDUH/E17TQP+iqX07RMREbkYpYdhVjqU5UNCH7jjXxrwVyynICciInIhFaXw3m1w9FuI6gh3fgxhUVZXJaIgJyIicl7VlfDRXZCTBeExMMUJkYlWVyUCKMiJiIicW20tzPkZ7P43BIWbszbE9rC6KhEPBTkREZGzMQxY/ARs+dicteH2d6HDFVZXJVKHgpyIiMjZrPg/+GqmuTzpVegx0tp6RM5CQU5EROT7vn4dlv/RXB7zf9DvVmvrETkHBTkREZHv2uKEBY+Zy8Meh6sesLYekfNQkBMRETll93/A+VPAgEE/geFPWV2RyHkpyImIiABkr6s79dbYP2vqLfF6CnIiIiL5O+Bft0DVceg6HNJmQkCg1VWJXJCCnIiItGyFB+DdNDhxDOwD4fZZEBRidVUiF0VBTkREWq6yAjPEleRA7GXww48gtI3VVYlcNAU5ERFpmcqLzZ9Tj+yGyGSYkgmt21ldlUi9KMiJiEjLU3kc3r8Dclwn50/NhKhkq6sSqTcFORERaVmqK+HDH8P+1RASAVOcEHeZ1VWJNIiCnIiItBw11eC8D3YvhaBwuPNDSEq1uiqRBlOQExGRlqG2FuY/DNvmQkAw3DELOl1tdVUil0RBTkRE/J9hwKfTYcO/wBYAt7wJ3W+0uiqRSxZ0KU+uqqoiLy+P48ePExcXR0xMTGPVJSIi0niW/RG+fNVcnvgy9J5gbT0ijaTeV+RKS0t57bXXuP7664mKiqJz58707t2buLg4OnXqxP3338/XX3/dFLWKiIjU3+rnYeX/mctj/wwDfmBtPSKNqF5B7m9/+xudO3fmH//4BzfccANOp5MNGzawc+dO1qxZw29+8xuqq6sZOXIkN910E7t27WqqukVERC5s3Zuw9Nfm8ojfwJX3W1uPSCOzGYZhXOzOt956K7/+9a/p27fveferqKjgjTfeICQkhPvuu++Si2wKxcXFREVFUVRURGRkpNXliIhIY9v0ETjvBwy4dhrc+BurKxJpdPUKct9VUlJCREREY9fTbBTkRET82I4F8MEUMGrgivth7LNgs1ldlUija/Bdq0OHDiUvL68xaxEREbl03y6Hj+42Q1y/O2DM/ynEid9qcJAbNGgQV111FTt27KjT7nK5GDt2bL1ea8aMGVxxxRVEREQQHx/PpEmT2Llz5wWft2LFCgYOHEhYWBhdu3bl1Vdfrdf7ioiIn9n/Bbz/A6iphF7jYOJLEKCRtsR/Nfjb/frrr/OTn/yEa6+9ls8//5xvvvmG2267jUGDBhEaGlqv11qxYgUPPvgga9euZenSpVRXVzNq1CjKysrO+Zy9e/cyduxYhg4disvl4qmnnuLhhx8mIyOjoR9JRER82cGv4V+3QtVx6DbCHCsu8JJG2RLxeg3uI3fKjBkz+N3vfkdNTQ2jR4/mmWeeweFwXFJRhw8fJj4+nhUrVjBs2LCz7vPEE08wb948tm/f7mmbOnUqGzduZM2aNRd8D/WRExHxIzku+OdEqCiCzkPhzo8gONzqqsQPVVTXEBoUaHUZHg2+Ipebm8vDDz/M73//e3r37k1wcDB33HHHJYc4gKKiIoDzDjC8Zs0aRo0aVadt9OjRrFu3jqqqqjP2r6iooLi4uM5DRET8QN4WeDfNDHEdh8APP1CIk0ZVXF7F7K8OcNura7jnLe8aK7fB15y7du1Kr169+Oijj7j55pv59NNPue2228jOzuaJJ55ocEGGYTBt2jSuvfZa+vTpc8798vLySEhIqNOWkJBAdXU1BQUFJCYm1tk2Y8YMnnnmmQbXJSIiXih/B7wzEU4cA/sg+OGHENLa6qrED1TV1LJq12Eystz8e9shKqprAQgMsFFQWkFsm/p1I2sqDQ5yb731FnfccYdnffTo0Sxbtoxx48axf/9+Xn755Qa97i9+8Qs2bdrE559/fsF9bd+7C+nUr8TfbweYPn0606ZN86wXFxfToUOHBtUoIiJe4MgeeGcCHC+AxP7wowwIU1cZaTjDMNiaU4wzy828jW4KSis923rEtyHdkcyk1CSvCXFwCUHuuyHuFIfDwRdffFHvu1ZPeeihh5g3bx4rV64kOTn5vPu2b9/+jOFP8vPzCQoKol27dmfsHxoaWu+bMERExEsd2wf/HA+lhyA+BabMgfBoi4sSX5VXVM6cDW6cWdl8c6jU0x7bJoQJ/e2kO+ykJEWe9UKR1Rr9dp7OnTuzevXqej3HMAweeughMjMzWb58OV26dLngc4YMGcL8+fPrtC1ZsoRBgwYRHBxcr/cXEREfUnjQDHHFboi9DH48F1qdu0+1yNmUVVSzeEsemS43q/cUcOrWz5CgAEb1TiDdYWdojziCA717+Jp63bV64MABOnbseNEv7na7sdvtF9zv5z//Oe+99x5z586lZ8+envaoqCjCw80Oq9OnT8ftdvPOO+8A5vAjffr04YEHHuD+++9nzZo1TJ06lffff5/Jkydf8D1116qIiA8qzoW3xsCxvRDTFe5eCJGJF36eCFBTa/DFngKcWW4Wb8njRFWNZ9uVXWJIT7Uzpm8iUeG+c0GoXkEuISGBCRMmcP/993PllVeedZ+ioiI+/PBDnn/+eR544AEeeuihCxdxjkuVb731FnfffTcAd999N/v27WP58uWe7StWrODRRx9l69atJCUl8cQTTzB16tSL+iwKciIiPqY0H96+GQq+geiOcM8iiDp/NxwRgB15xWRmuZmzwc2h4gpPe5fY1qSl2klLtdMhppWFFTZcvYLcT3/6UyIiInjrrbcIDg5m0KBBJCUlERYWxrFjx9i2bRtbt25l0KBBPP3004wZM6Ypa78kCnIiIj6k9DD8cxwc3gGRyXDPAmjb2eqqxIvll5Qzb0MOziw323JPDzkWFR7M+P6JpDuSSe0Q7ZX93uqjXkEuJCSEgwcPEhkZSUJCArfddhtHjhzhxIkTxMbGkpqayujRo887bIi3UJATEfER3w1xEYlw9wJo183qqsQLlVfVsGTbIZxZ2azaVUBNrRlxggNtDO8ZT7ojmeG94rxqQN9LVa+bHex2Oy6Xi5tuuonS0lL++Mc/Eh8f31S1iYhIS6cQJxdQW2vw5d6jZLqyWbg5j9KKas+21I7RpKfaGdcvibatQyyssunUK8g99thjTJgwgUGDBmGz2fjXv/7lGbj31E0JIiIijaL0sHl3qkKcnMWew6VkZrnJdLlxF57wtCe3Dff0e+sa18bCCptHveda3bp1K3PnzuXpp5+ma9eu7Nu3D5vNRvfu3enfvz8DBgygf//+Xt0/DvTTqoiIV/OEuO0KceJxtKySTzblkJHlZuPBQk97RGgQN/dLJC3VzhWdYwgI8O1+b/VR7yB3Svfu3Vm7di2tW7dm06ZNbNiwwfPYsmULJSUljV1ro1KQExHxUqWHzRkb8rcpxAkV1TV8tj0fp8vNsh35VJ/s9xYYYOO6y+JIS7UzsncCYcH+0++tPhoc5M7HMAyvvwtEQU5ExAuVFZhX4k6FuLs+gdjuVlclzcwwDLIOHCMjy82CTbkUnajybOtjjyQ9NZnx/ZOIi9CMTY0+swOce1w4ERGRc1KIa/EOHDmO05VNpsvN/iPHPe3tI8OYlGpOlXVZQoSFFXqfJglyIiIi9fLdENemvUJcC1J0vIoFm3NxZmWzbv8xT3urkEBu6tOeyY5kBndtR2AL6vdWHwpyIiJirbIC+OeE0yHu7gUKcX6uqqaWFTsP43Rl8+/t+VRW1wJgs8G13WNJd9gZndKeViGKKReiIyQiItbxhLitCnF+zjAMNruLcGa5mbcxh6NllZ5tPRMiSHfYmTjATvuoMAur9D0KciIiYo3SfDPEHd6uEOfH3IUnmONy48zKZs/hMk97bJtQJg5IIt1hp3dipPrXN5CCnIiINL/iHDPEHdl18saG+QpxfqS0oppFm3NxZrlZu/cIp8bHCA0KYHRKe9IcdoZ2jyUoMMDaQv2AgpyIiDSvwoPmjQ3H9kJUB7hrHsR0tboquUTVNbWs3nMEZ1Y2n27No7yq1rNtcNcY0h3JjOnTnoiwYAur9D8KciIi0nyO7TNDXOEBiO4Ed38C0R2trkouwfbcYpxZ2czdkEN+SYWnvWtcayY7kpk4IInktq0srNC/KciJiEjzOLLHDHHFbojpZv6cGmW3uippgPzicuZuyCEjK5sdeadncmrbKpgJ/ZNIdyTTLzlK/d6agYKciIg0vfwd5rRbpYcgtqf5c2pEe6urkno4XlnNkq2HcLrcfL7rMCdnyiIkMIARl8eTlmrn+p7xhASp31tzUpATEZGmlbcF3pkIxwsgPgV+PBfaxFldlVyE2lqDtd8ewelys2hzLmWVNZ5tgzq1Jc1hZ1zfJKJaqd+bVRTkRESk6eRsgHcnwYljkNgfpsyBVjEWFyUXsju/hIwsN3NdbnKKyj3tHWLCSU9NJi3VTufY1hZWKKcoyImISNPIXgfvpkNFEdgHwo+cEB5tdVVyDkdKK5i3MYdMl5tN2UWe9oiwIMb1M8d7G9Sprfq9eRkFORERaXz718C/boXKEugwGO78CMIira5Kvqe8qob/bM8n05XN8p2HqT7Z8S0owMb1PeNIdyRzQ694woIDLa5UzkVBTkREGteez2D2nVB1HDoPhR/MhtA2VlclJxmGwbr9x3BmZfPJplxKyqs92/onR5GWamd8/yTatQm1sEq5WApyIiLSeLbPh49/AjWV0G0E3D4LQjSGmDfYV1CG0+Um05XNwaMnPO1JUWFMSrWT7rDTPT7CwgqlIRTkRESkcWycDXN+DkYNXD4BJr8OQbqqY6XC45V8sikXZ1Y2WQcKPe2tQwIZ2zeRNIedwV3aERCgfm++SkFOREQu3Vf/gIWPmcv9fwgT/g6B+ifGCpXVtSzfmY8zy81nO/KprDGnygqwwdAecaQ77Izq3Z7wEPV78wf6r0xERC7Nqr/Cf54xl698AG76EwRoUNjmZBgGG7OLcGZlM39jDseOV3m2XZ4YSXqqnYkDkoiPDLOwSmkKCnIiItIwhmEGuM//Zq4PfQxueBo0PEWzyT52nDkuN06Xm28Pl3na4yJCSUu1k5Zq5/JE3S3szxTkRESk/mprYdF/w9evm+s3PgPXPmJpSS1FSXkVizbnkZGVzZd7j3raw4IDuCmlPWmOZK7p1o6gQF0VbQkU5EREpH5qqmHug7BpNmCDm/8CV9xrdVV+rbqmllW7CnC63CzZmkdFtdnvzWaDIV3bkZZqZ0zfRNqE6p/1lkZ/4yIicvGqK8zhRXZ8ArZASHsV+t1mdVV+yTAMtuYUk+lyM3dDDgWlFZ5t3ePbkO6wM2mAnaTocAurFKspyImIyMWpLDMH+v12GQSGwK1vQ6+bra7K7+QVlTNng5vMLDc7D5V42mNahzChvzlVVl97lKbKEkBBTkRELsbxo+aUW+51ENwK7ngPug23uiq/UVZRzadb83BmuVm9pwDDnCmLkKAARl6eQFqqnet6xhGsfm/yPQpyIiJyfkXZ8G46FOyEsGhz3tQOV1pdlc+rqTVYs+cIzqxsFm/N43hljWfbFZ3bku5IZmzfRKLCgy2sUrydgpyIiJzb4W/g3TQozoaIJJjihPjLra7Kp+3MK8HpymaOy82h4tP93jq3a0VaajJpqXY6ttO0ZnJxFOREROTs3Oth1i1w4ii06w5TMiG6o9VV+aTDJRXM25iDMyubrTnFnvao8GDG9Usk3ZGMo2O0+r1JvSnIiYjImfYsM29sqCqDpFS482NoHWt1VT6lvKqGpdsO4czKZuWuAmpqzY5vwYE2hveMJ91hZ3iveEKDNFWWNJyCnIiI1LXFCc6fQm0VdLkO7vgXhEZYXZVPqK01+HrfUZxZbhZuzqWkotqzbUCHaCY77Izrl0Tb1iEWVin+REFORERO+/p1WPAYYEDviZD+DwgKtboqr/ft4VIyXW6cWW7chSc87fbocHO8t1Q73eLaWFih+CuvCHIrV67k2WefZf369eTm5pKZmcmkSZPOuf/y5csZPvzM2963b99Or169mrBSERE/ZRiw4v9g+R/N9UE/gbF/hgD97Hcux8oq+WRTDhlZbjYcLPS0R4QGMbZvIukOO1d0jiEgQP3epOl4RZArKyujf//+3HPPPUyePPmin7dz504iI09PBhwXF9cU5YmI+Leaalj4GKx/y1wf9jgMf8qc/0nqqKiuYdmOwzizslm2M5+qGrPfW2CAjWE9Ykl3JDOydwJhwQrA0jy8IsiNGTOGMWPG1Pt58fHxREdHN35BIiItReVxyLgXdi4EbDDm/+Cqn1pdlVcxDIOsA4VkurKZvzGXohNVnm0pSZGkO5KZ0D+JuAj9BC3NzyuCXEOlpqZSXl5O7969efrpp8/6c+spFRUVVFScHq+nuLj4nPuKiLQIZUfg/dsh+2sIDIXJr0PvCVZX5TUOHj1+st9bNvuOHPe0J0SGMinVTnpqMj3b6yYQsZZPBrnExERmzpzJwIEDqaio4N1332XEiBEsX76cYcOGnfU5M2bM4JlnnmnmSkVEvNSxfeZsDUf3mLM1/GA2dBpidVWWKzpRxcLNuWRmuflq31FPe3hwIGP6tCfdkcyQbu0IVL838RI2wzg1o5t3sNlsF7zZ4WzGjx+PzWZj3rx5Z91+tityHTp0oKioqE4/OxERv5ezwZw3tSwfojrAjzIgrqfVVVmmqqaWld8cxulys3TbISqrawGzi+A13WJJd9gZndKe1qE+ee1D/JzffCsHDx7MrFmzzrk9NDSU0FD1XxCRFm73v+HDu6CyFBL6mAP9RiZaXVWzMwyDLe5inK5s5m3I4UhZpWdbj/g2TB6YzMQBSSRGhVtYpciF+U2Qc7lcJCa2vJORiMhF2/A+zPsF1FabA/3e/i6ERVldVbPKKTzBnA1uMrPc7Mov9bTHtglhQn876Q47KUmRmipLfIZXBLnS0lJ2797tWd+7dy8bNmwgJiaGjh07Mn36dNxuN++88w4Azz33HJ07dyYlJYXKykpmzZpFRkYGGRkZVn0EERHvZRiw6i/w2e/N9b63wsSXIahlzC5QWlHN4i15ZLqy+WLPEU51KAoJCmBU7wTSHXaG9ogjODDA2kJFGsArgty6devq3HE6bdo0AO666y7efvttcnNzOXDggGd7ZWUljz32GG63m/DwcFJSUliwYAFjx45t9tpFRLxabQ0s/G9Y94a5fvXDcOMzEODfoaWm1mD17gIyXW4Wb8njRFWNZ9uVXWKY7LAzpm8ikWHBFlYpcum87maH5lJcXExUVJRudhAR/1VZBhn3nR4j7qY/weCpVlfVpHbkFePMcjN3g5tDxadvcOsS25q0VDtpqXY6xLSysEKRxuUVV+RERKSRleTBe7dD7gZzjLj0mZAyyeqqmkR+STnzNphTZW3PPT1GaHSrYMb3SyLdYWdAh2j1exO/pCAnIuJvDm2D926DooPQqh3c8T50vMrqqhrVicoalmzLw5nlZtWuw9Se/G0pONDGiF4JpDnsDO8ZT0iQf/+ELKIgJyLiT/Ysgw9/DBXF0K473PkRxHS1uqpGUVtr8OXeozizslm0JY/SimrPttSO0Ux2JDOuXyLRrVrGTRwioCAnIuI/st6FTx4xhxfpeDXc8S9oFWN1VZdsd34pma5s5rhycBee8LR3iAknLTWZtFQ7XWJbW1ihiHUU5EREfJ1hwGf/A6v+bK73vRUmvgRBvjsI+tGySuZvzMGZlc3G7CJPe0RYEOP6JZLuSGZQp7bq9yYtnoKciIgvqyo3B/nd/JG5Puy/YfivzPmlfExFdQ2fbc8nI8vN8p35VJ/s+BYYYOO6y+JId9i58fIEwoIDLa5UxHsoyImI+KrSw/DBnXDwSwgIgnHPgWOK1VXVi2EYrN9/DKfLzScbcyguP93vra89inSHnfH9k4ht47tXF0WakoKciIgvOrQN3r8dCg9AaBTc9k/oNvzCz/MS+4+U4cxyM2eDm/1HjnvaE6PCmJRqJz3VTo+ECAsrFPENCnIiIr5m11L46B6oLIG2XeCHH0LcZVZXdUFFx6v4ZHMOziw36/cf87S3Dgnkpj6JTHbYuaprOwIDfO9nYRGrKMiJiPgKw4AvX4NPp4NRC52ugdtnefWdqZXVtaz45jDOrGz+sz2fyppaAAJscG2PONJT7YxKSaBViP45EmkI/ZcjIuILaqpg0eOw7k1zPfVHcPPfvHLie8Mw2JRdhDMrm3kbczh2vMqzrVf7CNIddiYOsJMQGWZhlSL+QUFORMTbnSiEj+6Gb5cBNhj5DFz9sNfdmeouPMEcl5uMrGy+PVzmaY+LCGXSgCTSUpPpnaS5rUUak4KciIg3O7IH3r8DCr6B4FYw+XXodbPVVXmUlFexaEsezqxs1n571NMeFhzA6JT2pKXaubZ7LEGBmipLpCkoyImIeKs9y8wrceWFEGmHH7wPif2trorqmlo+312AM8vNkm15lFfVerYN7hpDuiOZMX3aExEWbGGVIi2DgpyIiLfx3NTwFBg1YB9kTrcV0d7SsrblFOPMymbOhhwKSis87d3iWpPuSGZSqh17dLiFFYq0PApyIiLepLoCFkwD1yxzvf8PzIF+g625MeBQcTlzN7hxZrnZkVfiaY9pHcKE/kmkO+z0tUdpqiwRiyjIiYh4i5JD8OEUc6YGWwCM/D0MebDZb2o4XlnNkq2HyMjKZvXuAk7OlEVIYAA39o4nPTWZ63rGEax+byKWU5ATEfEGORtg9g+h2G3O1HDrm9D9xmZ7+5pag7XfHsGZ5WbxllzKKms82wZ1aku6I5mb+yYS1Ur93kS8iYKciIjVtmTAnAeh+gS06wE/mA2x3ZvlrXcdKsHpcjPH5Sa3qNzT3jGmFekOO2mpdjq1a90stYhI/SnIiYhYpbYWlv0PrPqLud59JNzyBoRFNenbFpRWMH+jOVXWZneRpz0yLIhx/ZNIT7UzsFNb9XsT8QEKciIiVjhRCM6fwq5PzfVrfgkjfgMBgU3yduVVNfx7+yEys9ws/+YwNSc7vgUF2Li+ZzzpDjs39IonLLhp3l9EmoaCnIhIczu0DT64E45+C0FhMP4F6H97o7+NYRh8ve8Yma5sPtmUS0l5tWdb/w7RpKfaGdcvkXZtQhv9vUWkeSjIiYg0py1OmPsLqCqDqA7mpPdJAxr1LfYVlOF0ucl0ZXPw6AlPuz06nLRUO5NS7XSPb9Oo7yki1lCQExFpDjXV8J9n4IsXzPUu18Etb0Hrdo3y8oXHK5m/KZfMrGyyDhR62tuEBjG2b3vSUpO5qksMAQHq9ybiTxTkRESaWtkR+Pge2LvCXL/6YbM/XOClnYIrq2tZtjOfzCw3n+3Ip7LGnCorMMDG0B6xpDuSGXl5AuEh6vcm4q8U5EREmlLOBvhgChQdMCe9n/gS9Elv8MsZhoHrYCGZWW7mb8qh8HiVZ1vvxEjSHXYmDEgiPsKamSBEpHkpyImINJUN78Mnj0B1ObTtAne8Bwm9G/RSB48eZ47LjdPlZm9Bmac9PiKUtFQ7aQ47vdpHNlLhIuIrFORERBpbdYU54f3Xr5vrPUZB+j8gPLpeL1NcXsXCTbk4XW6+2nvU0x4eHMhNfdqT7rBzdbdYAtXvTaTFUpATEWlMhQfgw7sgJ8tcH/Y4XD8dAi5uXtKqmlpW7TqMM8vN0m2HqKg2+73ZbHB1t3akpyZzU5/2tA7V6VtEFORERBrPN0vAeT+UF0JYtHkV7rJRF3yaYRhszSnGmeVm3kY3BaWVnm094tuQ7khmUmoSiVHhTVe7iPgkBTkRkUtVWwPLZ8DKZ831pFS49Z/QttN5n5ZXVM6cDW6cWdl8c6jU096udQgTBiQx2ZFMSlKkpsoSkXNSkBMRuRSlhyHj3tNDi1xxH4z+IwSdfbaEsopqFm/JI9PlZvWeAgxzpixCggIY2TuByQ47Q3vEERx4cT/FikjLpiAnItJQB9bCR/dASY45tMj4F6DfrWfsVlNr8MWeAjKz3CzakseJqhrPtis7x5DusDOmbyJR4cHNWb2I+AEFORGR+jIMWPsyLP011FZD7GVw27sQ36vObjvzSnC6spnryiGvuNzT3rldK9IdyaSl2ukQ06q5qxcRP6IgJyJSH+VF5lyp2+eZ6ynpMOEFCI0A4HBJBXM3uMl0udmaU+x5WlR4MOP7J5LuSCa1Q7T6vYlIo1CQExG5WO718PFP4Ng+CAg2+8JdeT/l1bUs2ZhDZlY2K3cVUFNrdnwLDrQxvGc86Y5khveKIzRIU2WJSONSkBMRuRDDgLWvnPwptQqiOlI7+U2+qu6KM2MTizbnUVJR7dl9QIdoJjvsjOuXRNvWIRYWLiL+TkFOROR8jh+FuQ/CzoUAlHYdy1vtpjH7vRLchWs9u9mjw0lLtZPusNM1ro1V1YpIC+MV97evXLmS8ePHk5SUhM1mY86cORd8zooVKxg4cCBhYWF07dqVV199tekLFZGW5cBaeHUo7FxIjS2Y19r8jD7b7uQvq/JxF54gIjSIO67owAc/Hcyqx4fz2OieCnEi0qy84opcWVkZ/fv355577mHy5MkX3H/v3r2MHTuW+++/n1mzZrF69Wp+/vOfExcXd1HPFxE5r9paqlf9jYDlfyDAqGGf0Z4HKx5m64nOBAbYGNYjlnRHMiN7JxAWrH5vImIdm2GcGo7SO9hsNjIzM5k0adI593niiSeYN28e27dv97RNnTqVjRs3smbNmrM+p6KigoqKCs96cXExHTp0oKioiMjIyEarX0R8l2EYbNq5i1afPEiP0q8AmFNzNb+qupcu9gTSUpOZ0D+JuIizD/YrItLcvOKKXH2tWbOGUaPqzl84evRo3njjDaqqqggOPnNQzRkzZvDMM880V4ki4kMOHDlOpsvNga/n80T588TbCjlhhPCXoPsJvPJHOB0d6Nk+wuoyRUTO4JNBLi8vj4SEhDptCQkJVFdXU1BQQGJi4hnPmT59OtOmTfOsn7oiJyItU9GJKhZuzsWZlc3Gffk8FvQhfwlaADbIC+mMe+TLTB94NYEBGu9NRLyXTwY54IzBNE/9QnyuQTZDQ0MJDdXPISItWVVNLSt2HibT5Wbp9kNUVtfSzebGGfISfQL2mfs4fkL7MX+kfXC4tcWKiFwEnwxy7du3Jy8vr05bfn4+QUFBtGvXzqKqRMQbGYbBZncRziw38zfmcKSs8tQWHm67hocqXie4thzCY2DiSwT3GmtpvSIi9eGTQW7IkCHMnz+/TtuSJUsYNGjQWfvHiUjL4y48wRyXG2dWNnsOl3naY9uEcHufNvy08Hmi9i0yG7teD5Nehcgzu2WIiHgzrwhypaWl7N6927O+d+9eNmzYQExMDB07dmT69Om43W7eeecdwLxD9cUXX2TatGncf//9rFmzhjfeeIP333/fqo8gIl6gtKKaRZtzcWa5Wbv3CKfuyQ8NCmBUSnvSU+0MC95B4JyfQEmOOc3WiF/DkF9AgFcMqykiUi9eEeTWrVvH8OHDPeunbkq46667ePvtt8nNzeXAgQOe7V26dGHhwoU8+uijvPTSSyQlJfHCCy9oDDmRFqi6ppbVe47gzMrm0615lFfVerZd1SWGdIedMX0TiQyqhc/+B774O2BAu+4w+XVISrWueBGRS+R148g1l+LiYqKiojSOnIiP2p5bjDMrmzkbcjhccnqMyK6xrUl32Jk4wE6HmFZmY94WcP4U8rea66lT4KY/QahmYRAR3+YVV+RERC5GfnE5czfkkJGVzY68Ek9721bBjO+fRLojmf7JUafvXq+tgTUvmlfiaiqhVSxM+DvohgYR8RMKciLi1U5U1rBkWx4ZWW4+33WY2pO/IYQEBnBDr3jSHHaG94wnJOh7fdyO7Yc5P4P9q831nmNh/AvQJq55P4CISBNSkBMRr1Nba7B27xGcWW4Wbc6lrLLGs21gp7akpdoZ1y+R6FYhZz7ZMGDDe7DoCagsgZA2cNMM8+fUc4wzKSLiqxTkRMRr7M4vwZnlZo7LTU5Ruae9Q0w46anJpKXa6Rzb+twvUFYA838JOz45+cTBkPYqxHRp4spFRKyhICciljpSWsH8jTk4XW42ZRd52iPCghjXL5HJjmQGdmp7zllbPHYsgPmPQFm+OazI8Kfgml9CQGDTfgAREQspyIlIsyuvquE/2/PJdGWzfOdhqk92fAsKsHF9zzjSHcnc0CuesOCLCGHHj8Kix2HzR+Z63OWQPhMS+zXhJxAR8Q4KciLSLAzDYN3+YzizsvlkUy4l5dWebf2So0hPtTO+fxLt2tRjTuTvXoWzBcDVD8P10yE4rPE/gIiIF1KQE5Emta+gDKfL7Pd24OhxT3tiVBhpqXbSHXa6x0fU70WPH4XFT8KmD8z12J4w6WVIHtSIlYuIeD8FORFpdIXHK/lkUy6ZLjfr9x/ztLcOCWRM30TSU+0M7tqOgIAG3EW6YyF88giUHtJVOBFp8RTkRKRRVFbXsnxnPpkuN//Znk9ljTlVVoANru0Rx2SHnZG9E2gV0sDTzhlX4S6DSa/oKpyItGgKciLSYIZhsDG7CGdWNvM35nDseJVnW6/2EUx2JDNxQBLxkZd4tWznInNYEc9VuIfg+qd0FU5EWjwFORGpt+xjx5njcuN0ufn2cJmnPS4ilEkDkkhLTaZ3UiPMYVx62LwKt+Vjcz32Mpj4MnS44tJfW0TEDyjIichFKSmvYtHmPJyubNZ+e9TTHhYcwOiU9qQ7krmmWzuCAgPO8yoXyTBg42z4dDqcOGZehRvyC3NsuODwS399ERE/oSAnIudUXVPLqt0FOLPcLNmaR0W12e/NZoMhXduRlmpnTN9E2oQ24qnk2D745FHY85m5ntAXJv4dklIb7z1ERPyEgpyI1GEYBttyi3FmuZm7IYeC0grPtm5xrUl3JDMp1Y49upGvjNXWwJevwmf/A1XHITAUrn/S7A8XGNy47yUi4icU5EQEgEPF5Wa/tyw3Ow+VeNpjWocwoX8S6Q47fe1RF54qqyHytsC8hyAny1zvdC2Mfx5iuzf+e4mI+BEFOZEW7HhlNZ9uzcOZ5Wb17gJOzpRFSGAAI3snkJZq57qecQQ3Rr+3s6k8Dqv+DKufh9pqCI2EUb+H1B9DQBO9p4iIH1GQE2lhamoN1uw5gtOVzeIteRyvrPFsG9SpLemOZG7um0hUqyb+OfObJbDwMSjcb673Ggdj/wyRiU37viIifkRBTqSF+OZQCc4sc6qsvOJyT3undq1IT00mLdVOx3atmr6Q4hxzSJFtc831SDuM+V+4fHzTv7eIiJ9RkBPxYwWlFczbkIPTlc0Wd7GnPSo8mHH9Ekl3JOPoGN00/d6+r6YavpoJy/4AlaVgC4TBPzOn1wpt0/TvLyLihxTkRPxMeVUN/95+CGeWmxXfHKbmZMe34EAb1/eMJz3Vzg2XxxMaFNh8RWWvh09+CXmbzfXkK2Hc36B9n+arQUTEDynIifiB2lqDr/cdJdPlZsGmXEoqqj3bBnSIJt1hZ1y/JGJahzRvYScK4T+/g3VvAgaERcPIZ3Qzg4hII1GQE/Fh3x4uJdPlJtPlJvvYCU+7PTqctFQ7aQ473eIs+Nmyttac3H7p/4Oyw2Zb/x/AyN9Dm7jmr0dExE8pyIn4mGNllXyyKQeny43rQKGnvU1oEGP7tictNZmrusQQENAM/d7OJmcDLHocDn5prsdeBjf/FboMtaYeERE/piAn4gMqqmtYtuMwzqxslu3Mp6rG7PcWGGBjWI9Y0hzJjLw8gfCQZuz39n3Hj8Jnv4d1bwEGBLeG6/4bBv8cgkKtq0tExI8pyIl4KcMwyDpQSKYrm/kbcyk6UeXZlpIUSVqqnQkDkoiPCLOwSsyptda/bYa4E8fMtj63mAP7RiZZWpqIiL9TkBPxMgePHvf0e9tbUOZpT4gMZVKqnfTUZHq2j7Cwwu848KU5qG/eJnM9PgXG/h90vtbaukREWggFOREvUHSiioWbc8nMcvPVvqOe9vDgQMb0aU+6I5kh3doRaFW/t+8rcsN/njFvaAAIi4LhT8Ogn0CgTisiIs1FZ1wRi1TV1LLym8M4XW6WbjtEZXUtADYbXNMtlnSHndEp7Wkd6kX/mVYehy9eMOdGrToO2MAxBUb8BlrHWl2diEiL40X/Qoj4P8Mw2OIuxunKZt6GHI6UVXq2XZbQhnRHMhMHJJEYFW5hlWdRWwtbPoZ//xaK3WZbxyEw+o9gd1hamohIS6YgJ9IMcgpPMGeDm8wsN7vySz3tsW1CGN8/icmOZFKSIptnqqz6Ovi1OTeqe525HtURRv0Oek8yLx+KiIhlFOREmkhpRTWLt+SR6crmiz1HMMwRQwgJCmBU7wQmO5K5tkcswYFeOsPBsf3mnaibPzLXQ9rA0Gkw+EEItvhOWRERARTkRBpVTa3B6t0FZLrcLN6Sx4mqGs+2K7vEMNlhZ0zfRCLDgi2s8gKOH4VVfzEnuK+pBGyQeifc8P8gor3V1YmIyHcoyIk0gh15xTiz3Mzd4OZQcYWnvUtsa3OqrFQ7HWJaWVjhRaiuMMPbyj9DeaHZ1uU6czy4xP6WliYiImenICfSQPkl5czbkIMzy8223GJPe3SrYMb3SyLdYWdAh2jv7Pf2XbW1sCUDPvsdFB4w2+JTYOTvoPsI9YMTEfFiCnIi9XCisoYl2/LIdLlZ+c1hak/2ewsOtDGiVwJpDjvDe8YTEuSl/d6+79sVsPTXkLvBXI9IhBueNie4D7Bwui8REbkoCnIiF1Bba/Dl3qNkurJZuDmP0opqzzZHx2jSHMmM65tI29YhFlZZT+718J/fwbfLzfWQCLj2EXNe1BAv/wlYREQ8vCbIvfzyyzz77LPk5uaSkpLCc889x9ChQ8+67/Llyxk+fPgZ7du3b6dXr15NXaq0ELvzS8l0ZTPHlYO78ISnPbltOOmpdtIcyXSJbW1hhQ2Qv8O8E3XHJ+Z6QDAMugeGPQ5t4qytTURE6s0rgtwHH3zAI488wssvv8w111zDa6+9xpgxY9i2bRsdO3Y85/N27txJZGSkZz0uTv8QyaU5WlbJ/I05OLOy2Zhd5GmPCAvi5r6JpKXauaJzDAHeMlXWxTq2H5b/CTbNBqMWsEH/O+D6J6FtZ6urExGRBrIZxqnRraxz1VVX4XA4eOWVVzxtl19+OZMmTWLGjBln7H/qityxY8eIjo5u0HsWFxcTFRVFUVFRnTAoLU9FdQ2fbc8nI8vN8p35VJ/s+BYYYOP6y+JIc9i58fIEwoJ9sM9Yab55F+q6N6G2ymzrNc7sBxd/ubW1iYjIJbP8ilxlZSXr16/nySefrNM+atQovvjii/M+NzU1lfLycnr37s3TTz991p9bT6moqKCi4vSwEMXFxefcV/yfYRhkHThGRpabTzbmUFx+ut9bH3sk6anJTBiQRGybUAurvARlR8w5Ub/6B1SVmW1dr4cbfg3JAy0tTUREGo/lQa6goICamhoSEhLqtCckJJCXl3fW5yQmJjJz5kwGDhxIRUUF7777LiNGjGD58uUMGzbsrM+ZMWMGzzzzTKPXL77lwJHjOF3ZZLrc7D9y3NOeGBXGpFQ76al2eiREWFjhJTp+1AxwX848HeDsA81J7bteZ21tIiLS6CwPcqd8f6wtwzDOOf5Wz5496dmzp2d9yJAhHDx4kD//+c/nDHLTp09n2rRpnvXi4mI6dOjQCJWLtys6XsWCzblkurL5et8xT3urkEDG9Ekk3WFncNd2BPpav7fvOn4U1rwIX74GlSfnck3sD9c/BZeN1lhwIiJ+yvIgFxsbS2Bg4BlX3/Lz88+4Snc+gwcPZtasWefcHhoaSmioj/5MJvVWVVPLip2Hcbqy+ff2fCqrawEIsME13WOZ7EhmVEoCrUIs/0/g0pw4BmtehrWvQGWJ2da+H1w/HXqOUYATEfFzlv8rFhISwsCBA1m6dClpaWme9qVLlzJx4sSLfh2Xy0ViYmJTlCg+wjAMNmUXkelyM29jDkfLKj3beiZEkO6wM3GAnfZRfjDhe1kBrHnJ7AN3KsAl9DXvQu11swKciEgLYXmQA5g2bRpTpkxh0KBBDBkyhJkzZ3LgwAGmTp0KmD+Lut1u3nnnHQCee+45OnfuTEpKCpWVlcyaNYuMjAwyMjKs/BhiEXfhCea43DizstlzuMzTHtsmlEkDkkhz2OmdGOn9U2VdjOJc+OLvsP4tqDrZxy8+5WSAGwcBPjKjhIiINAqvCHK33347R44c4Xe/+x25ubn06dOHhQsX0qlTJwByc3M5cOCAZ//Kykoee+wx3G434eHhpKSksGDBAsaOHWvVR5BmVlJexaIteWRmuVnz7RFPe1hwAKN6tyfdYefa7rEEBfpJsDm2H1Y/D653oebklcakVBj233DZGAU4EZEWyivGkbOCxpHzPdU1tazecwRnVjafbs2jvKrWs21I13akOeyM6dOeiLBgC6tsZPk7zAC3+UOoPTlESschMOwx6KYJ7UVEWjqvuCIncj7bcorNqbI25HC45PRYgN3iWpPuSGZSqh17dLiFFTaB/Wtg9XPwzeLTbV2Hm1fgOl9jWVkiIuJdFOTEKx0qLmfuBjfOLDc78ko87TGtQxjfL5F0RzL9kqP8o9/bKbW18M0i8wrcwS9PNtrg8nFwzSOQPMjK6kRExAspyInXOF5ZzZKth3C63Hy+6zAnZ8oiJDCAG3vHk5aazHWXxRES5Gf9waorYPNHsPoFKNhptgWGQP8fwNUPQ2x3a+sTERGvpSAnlqqtNVj77REystws3pJLWWWNZ9ugTm1JdyRzc99Eolr5Ub+3U8qOmHOgfv0PKD1ktoVGwhX3wlVTIaK9tfWJiIjXU5ATS+w6VILT5WaOy01uUbmnvWNMK9JS7aQ77HRq19rCCpvQ4Z2w9mXYOBuqT372iEQY/DMYeA+E6eYbERG5OApy0mwKSiuYvzEHZ5abze4iT3tkWBDj+ieRnmpnYKe2/tXv7RTDgG+XmbMw7F56uj1xAAx5EHpPgqAQq6oTEREfpSAnTaq8qob/bM/HmZXNim8OU32y41tQgI3re8Yz2WFneK94woIDLa60iVSUmkOHfPUPyN92stFmzr4w5EFzKBF/DK4iItIsFOSk0RmGwbr9x3BmZfPJplxKyqs92/onR5HuSGZcv0TatfHjuW+P7IGvXwfXv6Di5NXHkDaQ+iO46gGI6WptfSIi4hcU5KTR7Csow+lyk+nK5uDRE572pKgw0hx20lKT6R7fxsIKm1htLez+N3z1mvnnKTHd4Mr7zbtQw6MtK09ERPyPgpxcksLjlXyyKRdnVjZZBwo97a1DAhnb1xzv7aouMQQE+PHPhyWHYMMsWP9PKNx/stEGPUbBlT+FbjdoCi0REWkSCnJSb5XVtSzbmU9mlpvPduRTWWNOlRVgg6E94kh32BnVuz3hIX7a7w3Mq297V5iT1+9YcHr6rLAoSJ1iDiGin09FRKSJKcjJRTEMgw0HC8l0uZm/MYdjx6s82y5PjGSyw86E/knER4ZZWGUzKCuADf+C9W/D0W9PtydfCYPuMe8+DWllVXUiItLCKMjJeR08epw5LjeZLjffFpR52uMjQpmUaict1c7liX4+7llNNez5zPz5dOciqKk020Mjod9t5thv7ftYW6OIiLRICnJyhuLyKhZtzsWZ5ebLvUc97eHBgYxOSSDdkcw13WMJ9Od+bwAFu8A1yxy4tzTvdHuSw7z61mcyhPjpoMUiIuITFOQEgOqaWlbtKsDpcrNkax4V1Wa/N5sNru7WjrTUZG7q0542oX7+lSkvhq1Oc9iQ7K9Ot4fHQL/bYcAPIbGfdfWJiIh8h5//qyznYxgGW3OKcWa5mbfRTUFppWdbj/g2pDnsTBpgJyk63MIqm0FtDexdCRvfh23zoPrk0Cm2QOgxEgbcCZfdpJkXRETE6yjItUB5ReXM2eAmM8vNzkMlnvZ2rUOYMCCJ9NRk+tgj/XOqrFMMA3JcsPlj2JJR96fT2J6Qeqd5BU4T14uIiBdTkGshyiqq+XRrHpkuN5/vLsAwZ8oiJCiAkb0TmOywM7RHHMGBfj7e2ZE9Znjb/CEc2X26PbwtpKSZV9/sAzVtloiI+AQFOT9WU2uwZs8RnFnZLN6ax/HKGs+2KzvHkO6wM6ZvIlHhwRZW2QyKc2DbXNj8EbjXn24PCoeeY8w7T7uN0E+nIiLicxTk/NDOvBKcrmzmunLIKy73tHdu14p0RzJpqXY6xPj5WGfFOWZ/t62ZcHDt6XZbAHS9HvreBpePg9AIy0oUERG5VApyfuJwSQVzN5jjvW3NKfa0R4UHM75/ImmpyTg6Rvt3v7dT4W3bHDiwpu62DleZP52mpENEgiXliYiINDYFOR9WXlXDkm2HcGZls2pXATW1Zse34EAbw3vGk+6wM7xXPKFBfjpVlmFAwTew4xNzmqzv/mwKZnjrPQl6T4QouyUlioiINCUFOR9TW2vw1b6jOLOyWbQ5j5KKas+2AR2imeywM65fEm1b+2l/r9pacK87Hd6+e8MCNuhw5cnwNgGikq2qUkREpFkoyPmIPYdLycwyfzp1F57wtNujw0l3mFNldY1rY2GFTaiiBL5dAbuWwDeLofTQ6W2BIdDlOuh1s3njgoYLERGRFkRBzosdLavkk005ZGS52Xiw0NMeERrE2L6JpDnsXNk5hgB/myrLMMwrbbuWmI99q6G26vT20EjoMcoMb91vhDA/n+tVRETkHBTkvExFdQ3LduSTkeVm+c58qmrMfm+BATauuyyOtFQ7I3snEBbsZ/3eKo/D/tWwa6kZ3o7trbu9bWfoMRouGwWdh2moEBERERTkvIJhGGQdKMSZlc0nm3IpOnH66lMfeyRpqclM6J9EXESohVU2stpayNsIez6DPcvg4JdQc3qKMAKCofM15pW3HqOgXXcN0isiIvI9CnIWOnDkOJkuN5mubPYdOe5pbx8ZxsRUc6qsnu39ZJwzwzBnVdi3CvauMPu8nThad5/IZOh+g3nlret1GuNNRETkAhTkmlnRiSoWbs4lM8vNV/tOB5lWIYHclNKedEcyQ7q1I9DX+70ZBhz91gxu+z43HyW5dfcJiYAuQ6HrcOg2XFfdRERE6klBrhlU1dSy8pvDOLPcLN1+iMrqWsDMLNd2jyUt1c7olPa0DvXhv47aGji0BQ58aQ7Ge2AtlOTU3ScwBJKvhM7XmsHNPhAC/Xx6MBERkSbkw8nBuxmGwRZ3MRlZ2czfmMORstP9vy5LaMNkRzITB9hpHxVmYZWXoLwYcrJOB7fsdVBZUnefwBBIvsIMbp2vNZeDw62pV0RExA8pyDWynMITzNngxpnlZnd+qac9tk0IEweY472lJEX61lRZNVVwaKs5c4J7vRnaCr4BjLr7hUaaYa3jEOh4lYKbiIhIE1OQawSlFdUs3pKHMyubNd8ewTiZb0KDAhiV0p70VDtDe8QSFBhgbaEXo6YKDu+E3I2QtwlyNkDuBqguP3Pf6I7fCW6DIb43BPjZsCgiIiJeTEGugWpqDT7fXUBmVjaLt+ZRXlXr2XZVlxgmO5K5qW97IsO8uA9YeREc2gb5WyFvsxneDm2Dmooz9w2LMvu02QeCfRDYHdAmvvlrFhEREQ8FuXranluMMyubuRtyyC85HXi6xrYm3WFn4gA7HWJaWVjhWVSUQMEu8+fQwzshf5v5U2nRwbPvHxoJ7ftBYn9I7GeGt5huEOADVxRFRERaEAW5i5BfXM7cDTk4XW625xZ72qNbBTOhfxJpqXYGdIi2tt9bbS2U5plhrWCXGdhOLX//7tHvikyGhN6QkHIyuPWH6M4KbSIiIj5AQe4cTlTWsGRbHs4sN6t2Hab2ZL+34EAbI3olkOawM7xnPCFBzRh4Ko9D4X44tu/sj7P1YzuldTzE9YTYHmZftoQUiL8cwts2R+UiIiLSBLwmyL388ss8++yz5ObmkpKSwnPPPcfQoUPPuf+KFSuYNm0aW7duJSkpiccff5ypU6deUg21tQZr9x4hM8vNoi15lFZUe7Y5OkaT7khmXL9Eols1wTyflWVQkgfFbijOgaJs889it/kocp85E8L32QIhpgvEXmYGttieJ5e7K7CJiIj4Ia8Ich988AGPPPIIL7/8Mtdccw2vvfYaY8aMYdu2bXTs2PGM/ffu3cvYsWO5//77mTVrFqtXr+bnP/85cXFxTJ48ud7vvzu/BGeWmzkuNzlFp69qdYgJJ22AnTRHMl1iW1/8C9ZUmzcSnDhmPsoLTy4XQtlhKMuH0lN/5kNZAVSVXdxrh0aaE8i37WyGtlPLbTtDVAcNsCsiItKC2AzDMC68W9O66qqrcDgcvPLKK562yy+/nEmTJjFjxowz9n/iiSeYN28e27dv97RNnTqVjRs3smbNmot6zwOuz+jkGMFv/+fXFJRVY8MgkFpahdhITY5kYMdIOkcFY6upMH+yrK74zqPcvIJWWQaVpebNBJ7l0jMHxr1Ywa0g0g6RSRCVbP4ZmWT2Yzu1HN5W01iJiIgI4AVX5CorK1m/fj1PPvkkYM6IUFJSwnXXXcfKlSspLi4+4zmrVq3iuuuuq7Nt6NChvP766xw5coTg4DOvSlVUVFBRcfou069mmwHx3iN/JTL0O8GoAthjPhoYx04LiYTwSAiLNofvCIuCVu2gdRy0ioU2J/9sfbItpM35Q1o1UHLJVYmIiIgPiIiIuOCNlJZfkcvJycFut7N69WquvvpqiouLiYqKsrIkEREREcsVFRURGRl53n0svyJ3yqnEGRERQVFREc8++yyzZ89m/fr1Z+ybmprKj370I/7rv/7L07Z27VpGjx7NN998Q0JCwhnP+f4VOXdODoOvuopt27Zht9ub4BP5huLiYjp06MDBgwcv+GXxZzoOJh0Hk46DjsEpOg4mHQdTcx+HiIiIC+5jeZCLjY0lMDCQvLw8wAx0kZGRFBcXk5SUdNYDZbfbKSwsrLOtrKyMoKAgOnfufNafVs8lIiKiRX8pT4mMjNRxQMfhFB0Hk46DjsEpOg4mHQeTNx0Hy0d9DQkJYeDAgSxdurRO+9KlS7n66qvP+pwhQ4acsf+SJUsYNGhQvUKciIiIiC+zPMgBTJs2jddff50333yT7du38+ijj3LgwAHPuHDTp0/nxz/+sWf/qVOnsn//fqZNm8b27dt58803eeONN3jssces+ggiIiIizc7yn1YBbr/9do4cOcLvfvc7cnNz6dOnDwsXLqRTp04A5ObmcuDAAc/+Xbp0YeHChTz66KO89NJLJCUl8cILL9RrDLnQ0NA6f7ZUoaGh/OY3v9Fx0HEAdBxO0XHQMThFx8Gk42DyxuNg+V2rVjl1d+zF3BEiIiIi4o284qdVEREREak/BTkRERERH6UgJyIiIuKjFOREREREfJRfBbmXX36ZLl26EBYWxsCBA1m1atUFnzNs2DDCwsLo2rUrr7766hnbMzIy6N27N6GhofTu3ZvMzMymKL1R1ec4OJ1ORo4cSVxcHJGRkQwZMoRPP/20zj5vv/02NpvtjEd5eXlTf5QGq88xWL58+Vk/344dO+rs5+/fhbvvvvusxyElJcWzjy9+F1auXMn48eNJSkrCZrMxZ86cCz5nxYoVDBw40K/ODfU9Dv54bqjvMfDXc0N9j4M/nhtmzJjBFVdcQUREBPHx8UyaNImdO3de8HneeG7wmyD3wQcf8Mgjj/CrX/0Kl8vF0KFDGTNmTJ1hS75r3759gDm4sMvl4qmnnuLhhx8mIyPDs8+aNWu4/fbbmTJlChs3bmTKlCncdtttfPnll83xkRqkvsdh5cqVjBw5koULF7J+/XqGDx/O+PHjcblcdfaLjIwkNze3ziMsLKw5PlK91fcYnLJz5846n69Hjx6ebS3hu/D888/X+fwHDx4kJiaGW2+9tc5+vvRdAHPWl/79+/Piiy9e1P579+5l7NixDB061K/ODfU9Dv54bqjvMTjF384N9T0O/nhuWLFiBQ8++CBr165l6dKlVFdXM2rUKMrKys75HK89Nxh+4sorrzSmTp1ap61Xr17Gk08+edb9f/nLXxqAUVRU5Gl74IEHjMGDB3vWb7vtNuOmm26q87zRo0cbd9xxRyNW3rjqexzOpnfv3sYzzzzjWX/rrbeMqKioxiqxydX3GCxbtswAjGPHjp3zNVvidyEzM9Ow2WzGvn37PG2+9l34PsDIzMw87z6PP/640atXrzpt/nBu+K6LOQ5n4+vnhu+6mGPgr+eG72rId8Efzw35+fkGYKxYseKc+3jrucEvrshVVlayfv16Ro0aVad91KhRfPHFF2d9zldffXVG2+jRo1m3bh1VVVWAmay//5qjR48+52tarSHH4ftqa2spKSkhJiamTntpaSmdOnUiOTmZcePGnfF/5d7iUo5BamoqiYmJjBgxgmXLltXZ1hK/C2+88QY33nijZ2DuU3zlu9BQ5/q79uVzQ2Pw9XPDpfCnc0Nj8MdzQ1FREcAZ3+/v8tZzg18EuYKCAmpqakhISKjTnpCQQF5e3lmfc+jQoTPaEhISqK6upqCgAIC8vLx6vabVGnIcvu8vf/kLZWVl3HbbbZ62Xr168fbbbzNv3jzef/99wsLCuOaaa9i1a1ej1t8YGnIMEhMTmTlzJhkZGTidTnr27MmIESNYuXKlZ5+W9l3Izc1l0aJF3HfffXXafem70FDn+rv25XNDY/D1c0ND+OO54VL547nBMAymTZvGtddeS58+fc65n7eeG7xiiq7GYrPZ6qwbhnFG2/kYJye5+O5zLvU1rdDQmt9//31++9vfMnfuXOLj4z3tgwcPZvDgwZ71a665BofDwd///ndeeOGFxiu8EdXnGPTs2ZOePXt61ocMGcLBgwf585//zLBhwxr0mt6ioTW//fbbREdHM2nSpDrtvvhdaIizHbfvt/vi96Gh/OncUB/+fG5oKH88N/ziF79g06ZNfP755xfc1xvPDX5xRS42NpbAwMAzEm9+fv4ZyfiUs7Xn5+cTFBREu3btAGjfvn29XtNqDTkOp3zwwQfce++9fPjhh9x4443n3TcgIIArrrjCK/9P61KOwXcNHjy4zudrSd8FwzB48803mTJlCiEhIefd15u/Cw11rr9rXz43XAp/OTc0Fl8/N1wKfzw3PPTQQ8ybN49ly5aRnJx83n299dzgF0EuJCSEgQMHsnTp0jrtS5cu5eqrrz7rc6688soz2pYsWcKgQYMIDg4GzP/7+v5rLlmy5JyvabWGHAcw/2/77rvv5r333uPmm2++4PsYhsGGDRtITEy85JobW0OPwfe5XK46n6+lfBfAvJtr9+7d3HvvvRd8H2/+LjTUuf6uffnc0FD+dG5oLL5+brgU/nRuMAyDX/ziFzidTj777DO6dOlywed47bmhyW6jaGazZ882goODjTfeeMPYtm2b8cgjjxitW7f23FXz5JNPGlOmTPHsv3HjRgMwfv7znxvbtm0z3njjDSM4ONj4+OOPPfusXr3aCAwMNP70pz8Z27dvN/70pz8ZQUFBxtq1a5v9812s+h6H9957zwgKCjJeeuklIzc31/MoLCz07PPb3/7WWLx4sbFnzx7D5XIZ99xzjxEUFGR8+eWXzf75LkZ9j8Hf/vY3IzMz0/jmm2+MLVu2GE8++aQBGBkZGZ59WsJ34ZQf/ehHxlVXXXXW1/S174JhGEZJSYnhcrkMl8tlAMZf//pXw+VyGfv37zcM48zj8O233xqtWrUyHn30Ub86N9T3OPjjuaG+x8Bfzw31PQ6n+NO54Wc/+5kRFRVlLF++vM73+/jx4559fOXc4DdBzjAM46WXXjI6depkhISEGA6Ho85txHfddZdx3XXXedZra2uNBQsWGAMGDDBCQkKMzp07G6+88soZr/nRRx8ZPXv2NIKDg41evXrV+Q/YW9XnOFx33XUGcMbjrrvu8uzzyCOPGB07djRCQkKMuLg4Y9SoUcYXX3zRjJ+o/upzDP73f//X6NatmxEWFma0bdvWuPbaa40FCxac8Zr+/l0wDMMoLCw0wsPDjZkzZ5719Xzxu3BqCIlzfcfPdhyWL19upKam+tW5ob7HwR/PDfU9Bv56bmjIfxP+dm442+cHjLfeesuzj6+cG2wnP5CIiIiI+Bi/6CMnIiIi0hIpyImIiIj4KAU5ERERER+lICciIiLioxTkRERERHyUgpyIiIiIj1KQExEREfFRCnIiIiIiPkpBTkRERMRHKciJiIiI+CgFOREREREfpSAnIgK8//77hIWF4Xa7PW333Xcf/fr1o6ioyMLKRETOzWYYhmF1ESIiVjMMgwEDBjB06FBefPFFnnnmGV5//XXWrl2L3W63ujwRkbMKsroAERFvYLPZ+MMf/sAtt9xCUlISzz//PKtWrVKIExGvpityIiLf4XA42Lp1K0uWLOG6666zuhwRkfNSHzkRkZM+/fRTduzYQU1NDQkJCVaXIyJyQboiJyICZGVlcf311/PSSy8xe/ZsWrVqxUcffWR1WSIi56U+ciLS4u3bt4+bb76ZJ598kilTptC7d2+uuOIK1q9fz8CBA60uT0TknHRFTkRatKNHj3LNNdcwbNgwXnvtNU/7xIkTqaioYPHixRZWJyJyfgpyIiIiIj5KNzuIiIiI+CgFOREREREfpSAnIiIi4qMU5ERERER8lIKciIiIiI9SkBMRERHxUQpyIiIiIj5KQU5ERETERynIiYiIiPgoBTkRERERH6UgJyIiIuKj/j9PmWJsKf/pIgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x12fc3d190>"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(expr.subs(t,0),expr.subs(t,1),(x,0,2),axis_center=(0,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{5}{6}$"
      ],
      "text/plain": [
       "5/6"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integrate(expr.subs(t,1)-expr.subs(t,0),(x,1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{10}$"
      ],
      "text/plain": [
       "sqrt(10)"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Point(2,expr.subs({t:1,x:2})).distance(Point(1,expr.subs({t:0,x:1})))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 10. C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 11. Point(4,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [],
   "source": [
    "beta=symbols(\"beta\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\beta$"
      ],
      "text/plain": [
       "beta"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "beta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\cos{\\left(\\beta \\right)}$"
      ],
      "text/plain": [
       "cos(beta)"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cos(beta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left[- \\frac{\\sqrt{3}}{2}, - \\frac{1}{2}\\right]$"
      ],
      "text/plain": [
       "Interval(-sqrt(3)/2, -1/2)"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function_range(_,beta,Interval(pi/6+pi,pi/3+pi))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 12. -1/S(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [],
   "source": [
    "hyper=Hyperbola(Point(0,0),2,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{4} - y^{2} - 1$"
      ],
      "text/plain": [
       "x**2/4 - y**2 - 1"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.equation(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(Point(3,0),slope=k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - k x + 3 k + y$"
      ],
      "text/plain": [
       "-k*x + 3*k + y"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.equation(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle k x - 3 k$"
      ],
      "text/plain": [
       "k*x - 3*k"
      ]
     },
     "execution_count": 209,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(solveset(l.equation(x,y),y))[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 24 k^{2} x + x^{2} \\cdot \\left(2 k - 1\\right) \\left(2 k + 1\\right) + 4 \\cdot \\left(9 k^{2} + 1\\right)$"
      ],
      "text/plain": [
       "-24*k**2*x + x**2*(2*k - 1)*(2*k + 1) + 4*(9*k**2 + 1)"
      ]
     },
     "execution_count": 210,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "line_and_quadratic(l,hyper)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {},
   "outputs": [],
   "source": [
    "q=QuadraticFunction(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 80 k^{2} + 16$"
      ],
      "text/plain": [
       "80*k**2 + 16"
      ]
     },
     "execution_count": 207,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(q.delta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [],
   "source": [
    "x1,x2=q.roots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{12 k^{2}}{\\left(2 k - 1\\right) \\left(2 k + 1\\right)} - \\frac{2 \\sqrt{5 k^{2} + 1}}{4 k^{2} - 1}$"
      ],
      "text/plain": [
       "12*k**2/((2*k - 1)*(2*k + 1)) - 2*sqrt(5*k**2 + 1)/(4*k**2 - 1)"
      ]
     },
     "execution_count": 194,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.tangent_lines(Point(3,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.encloses_point(Point(3,0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{1}{2}$"
      ],
      "text/plain": [
       "-1/2"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.asymptote[0].slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{1}{2}$"
      ],
      "text/plain": [
       "1/2"
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hyper.asymptote[1].slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 13. 1/S(2) or -1/S(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "metadata": {},
   "outputs": [],
   "source": [
    "h1,h2,h3=symbols(\"h1:4\",positive=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [],
   "source": [
    "O=Point(0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {},
   "outputs": [],
   "source": [
    "v1=Cylinder(Circle(O,65/S(2)),h1).volume"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{4225 \\pi h_{1}}{4}$"
      ],
      "text/plain": [
       "4225*pi*h1/4"
      ]
     },
     "execution_count": 218,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [],
   "source": [
    "v2=Cylinder(Circle(O,325/S(2)),h2).volume"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{105625 \\pi h_{2}}{4}$"
      ],
      "text/plain": [
       "105625*pi*h2/4"
      ]
     },
     "execution_count": 221,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [],
   "source": [
    "v3=Cylinder(Circle(O,325/S(2)),230).volume"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 234,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{12146875 \\pi}{2}$"
      ],
      "text/plain": [
       "12146875*pi/2"
      ]
     },
     "execution_count": 234,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 235,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{23\\right\\}$"
      ],
      "text/plain": [
       "{23}"
      ]
     },
     "execution_count": 235,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(v3/10-v2,h2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2429375 \\pi}{4}$"
      ],
      "text/plain": [
       "2429375*pi/4"
      ]
     },
     "execution_count": 236,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v2.subs(h2,list(_)[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{4225 \\pi h_{1}}{4} + \\frac{485875 \\pi}{8}$"
      ],
      "text/plain": [
       "-4225*pi*h1/4 + 485875*pi/8"
      ]
     },
     "execution_count": 237,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_/10-v1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{115}{2}\\right\\}$"
      ],
      "text/plain": [
       "{115/2}"
      ]
     },
     "execution_count": 238,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_,h1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 14. 115/2 23"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 241,
   "metadata": {},
   "outputs": [],
   "source": [
    "q,k,b=symbols(\"q,k,b\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(q**n,k*n+b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle q^{n} = b + k n$"
      ],
      "text/plain": [
       "Eq(q**n, b + k*n)"
      ]
     },
     "execution_count": 259,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\left( - \\frac{1}{2}, \\  \\frac{3}{16}, \\  - \\frac{11}{16}\\right), \\left( 0, \\  0, \\  0\\right), \\left( 1, \\  0, \\  1\\right)\\right\\}$"
      ],
      "text/plain": [
       "{(-1/2, 3/16, -11/16), (0, 0, 0), (1, 0, 1)}"
      ]
     },
     "execution_count": 260,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nonlinsolve([eq.subs({n:1}),eq.subs({n:3}),eq.subs({n:4})],[q,k,b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 263,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 15. 1,3,4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 265,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B,C,a,b,c=symbols(\"A,B,C,a,b,c\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 266,
   "metadata": {},
   "outputs": [],
   "source": [
    "eq=Eq(sin(2*B),sqrt(3)/7*b*cos(B))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 267,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sin{\\left(2 B \\right)} = \\frac{\\sqrt{3} b \\cos{\\left(B \\right)}}{7}$"
      ],
      "text/plain": [
       "Eq(sin(2*B), sqrt(3)*b*cos(B)/7)"
      ]
     },
     "execution_count": 267,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 272,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 2 \\sin{\\left(B \\right)} \\cos{\\left(B \\right)} = \\frac{\\sqrt{3} b \\cos{\\left(B \\right)}}{7}$"
      ],
      "text/plain": [
       "Eq(2*sin(B)*cos(B), sqrt(3)*b*cos(B)/7)"
      ]
     },
     "execution_count": 272,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expand_trig(eq)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 273,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\left(\\sqrt{3} b - 14 \\sin{\\left(B \\right)}\\right) \\cos{\\left(B \\right)}}{7}$"
      ],
      "text/plain": [
       "-(sqrt(3)*b - 14*sin(B))*cos(B)/7"
      ]
     },
     "execution_count": 273,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(simplify_equation(_,expr=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 274,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{14 \\sqrt{3} \\sin{\\left(B \\right)}}{3}\\right\\}$"
      ],
      "text/plain": [
       "{14*sqrt(3)*sin(B)/3}"
      ]
     },
     "execution_count": 274,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 275,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{14 \\sqrt{3}}{3}$"
      ],
      "text/plain": [
       "14*sqrt(3)/3"
      ]
     },
     "execution_count": 275,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(_)[0]/sin(B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 276,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{3}}{2}$"
      ],
      "text/plain": [
       "sqrt(3)/2"
      ]
     },
     "execution_count": 276,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "7/_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 277,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\pi}{3}$"
      ],
      "text/plain": [
       "pi/3"
      ]
     },
     "execution_count": 277,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "asin(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 278,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 \\pi}{3}$"
      ],
      "text/plain": [
       "2*pi/3"
      ]
     },
     "execution_count": 278,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pi-_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 279,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 16. (1) 2*pi/3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 282,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sin{\\left(2 \\operatorname{acos}{\\left(\\frac{13}{14} \\right)} \\right)} = \\frac{13 \\sqrt{3} b}{98}$"
      ],
      "text/plain": [
       "Eq(sin(2*acos(13/14)), 13*sqrt(3)*b/98)"
      ]
     },
     "execution_count": 282,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq.subs(B,acos(13/S(14)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 283,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left\\{\\frac{98 \\sqrt{3} \\sin{\\left(2 \\operatorname{acos}{\\left(\\frac{13}{14} \\right)} \\right)}}{39}\\right\\}$"
      ],
      "text/plain": [
       "{98*sqrt(3)*sin(2*acos(13/14))/39}"
      ]
     },
     "execution_count": 283,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solveset(_,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 284,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 3$"
      ],
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 284,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(list(_)[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 289,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\cos{\\left(\\operatorname{acos}{\\left(\\frac{13}{14} \\right)} + \\frac{\\pi}{6} \\right)}$"
      ],
      "text/plain": [
       "cos(acos(13/14) + pi/6)"
      ]
     },
     "execution_count": 289,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sin(2*pi/3+acos(13/S(14)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 290,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{5 \\sqrt{3}}{14}$"
      ],
      "text/plain": [
       "5*sqrt(3)/14"
      ]
     },
     "execution_count": 290,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trigsimp(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 291,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{15 \\sqrt{3}}{4}$"
      ],
      "text/plain": [
       "15*sqrt(3)/4"
      ]
     },
     "execution_count": 291,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "1/S(2)*_*7*3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 292,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 16. (2) 15/4*sqrt(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 298,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{3 \\sqrt{3}}{14}$"
      ],
      "text/plain": [
       "3*sqrt(3)/14"
      ]
     },
     "execution_count": 298,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trigsimp(sin(asin(sqrt(3)/2*5/S(7))+2*pi/3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{35 \\cos{\\left(\\frac{\\pi}{6} + \\operatorname{asin}{\\left(\\frac{5 \\sqrt{3}}{14} \\right)} \\right)}}{2}$"
      ],
      "text/plain": [
       "35*cos(pi/6 + asin(5*sqrt(3)/14))/2"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "5*7*sin(asin(sqrt(3)/2*5/S(7))+2*pi/3)/2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 295,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{15 \\sqrt{3}}{4}$"
      ],
      "text/plain": [
       "15*sqrt(3)/4"
      ]
     },
     "execution_count": 295,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 300,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=Point(0,-1,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 301,
   "metadata": {},
   "outputs": [],
   "source": [
    "B=Point(1,-1,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 302,
   "metadata": {},
   "outputs": [],
   "source": [
    "C=Point(1,0,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 303,
   "metadata": {},
   "outputs": [],
   "source": [
    "D=Point(0,2,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 304,
   "metadata": {},
   "outputs": [],
   "source": [
    "P=Point(0,0,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 309,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( 0, \\  -2, \\  1\\right)$"
      ],
      "text/plain": [
       "(0, -2, 1)"
      ]
     },
     "execution_count": 309,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Plane(P,A,B).normal_vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 310,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\left( -4, \\  -2, \\  -2\\right)$"
      ],
      "text/plain": [
       "(-4, -2, -2)"
      ]
     },
     "execution_count": 310,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Plane(P,D,C).normal_vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 305,
   "metadata": {},
   "outputs": [],
   "source": [
    "pyd=Pyramid(P,Polygon(A,B,C,D))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Pyramid}\\left(\\operatorname{Point3D}\\left(0, 0, 2\\right), \\operatorname{Point3D}\\left(0, -1, 0\\right), \\operatorname{Point3D}\\left(1, -1, 0\\right), \\operatorname{Point3D}\\left(1, 0, 0\\right), \\operatorname{Point3D}\\left(0, 2, 0\\right)\\right)$"
      ],
      "text/plain": [
       "Pyramid(Point3D(0, 0, 2), Point3D(0, -1, 0), Point3D(1, -1, 0), Point3D(1, 0, 0), Point3D(0, 2, 0))"
      ]
     },
     "execution_count": 306,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pyd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 307,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{acos}{\\left(\\frac{\\sqrt{30}}{30} \\right)}$"
      ],
      "text/plain": [
       "acos(sqrt(30)/30)"
      ]
     },
     "execution_count": 307,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Plane(P,A,B).angle_between(Plane(P,D,C))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 308,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 17. (2) 1/sqrt(30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 312,
   "metadata": {},
   "outputs": [],
   "source": [
    "data={0:800,1:100,2:60,3:30,4:10}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 313,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 800, 1: 100, 2: 60, 3: 30, 4: 10}"
      ]
     },
     "execution_count": 313,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 321,
   "metadata": {},
   "outputs": [],
   "source": [
    "dens={}\n",
    "for k,v in data.items():\n",
    "    dens[k]=v/1000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 322,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 0.8, 1: 0.1, 2: 0.06, 3: 0.03, 4: 0.01}"
      ]
     },
     "execution_count": 322,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dens"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 323,
   "metadata": {},
   "outputs": [],
   "source": [
    "X=FiniteRV(\"X\",dens)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 325,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0.1$"
      ],
      "text/plain": [
       "0.100000000000000"
      ]
     },
     "execution_count": 325,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "P(X>=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 332,
   "metadata": {},
   "outputs": [],
   "source": [
    "dens2={}\n",
    "for k,v in dens.items():\n",
    "    if(k<4):\n",
    "        dens2[4/S(10)-8/S(10)*k]=dens[k]\n",
    "    else:\n",
    "        dens2[4/S(10)-8/S(10)*k+2/S(10)]=dens[k]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 333,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{2/5: 0.8, -2/5: 0.1, -6/5: 0.06, -2: 0.03, -13/5: 0.01}"
      ]
     },
     "execution_count": 333,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dens2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 334,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y=FiniteRV(\"Y\",dens2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 335,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0.122$"
      ],
      "text/plain": [
       "0.122000000000000"
      ]
     },
     "execution_count": 335,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "E(Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 338,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0.0032$"
      ],
      "text/plain": [
       "0.00320000000000000"
      ]
     },
     "execution_count": 338,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-P(Eq(Y,2/S(5)))*(2/S(5)*0.04)+P(Y<2/S(5))*(2/S(5)*0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 339,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 18. (1) 0.1 (2)(i) 0.122 (ii) 变大"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 340,
   "metadata": {},
   "outputs": [],
   "source": [
    "e=Ellipse(Point(0,0),2,sqrt(2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 341,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{4} + \\frac{y^{2}}{2} - 1$"
      ],
      "text/plain": [
       "x**2/4 + y**2/2 - 1"
      ]
     },
     "execution_count": 341,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 393,
   "metadata": {},
   "outputs": [],
   "source": [
    "T=Point(0,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 394,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, 2\\right)$"
      ],
      "text/plain": [
       "Point2D(0, 2)"
      ]
     },
     "execution_count": 394,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 395,
   "metadata": {},
   "outputs": [],
   "source": [
    "C=Point(0,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 396,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, 1\\right)$"
      ],
      "text/plain": [
       "Point2D(0, 1)"
      ]
     },
     "execution_count": 396,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 397,
   "metadata": {},
   "outputs": [],
   "source": [
    "lines=e.tangent_lines(T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 398,
   "metadata": {},
   "outputs": [],
   "source": [
    "k=symbols(\"k\",real=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 399,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=Line(T,slope=k)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 400,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - k x + y - 2$"
      ],
      "text/plain": [
       "-k*x + y - 2"
      ]
     },
     "execution_count": 400,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 401,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 8 k x + x^{2} \\cdot \\left(2 k^{2} + 1\\right) + 4$"
      ],
      "text/plain": [
       "8*k*x + x**2*(2*k**2 + 1) + 4"
      ]
     },
     "execution_count": 401,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "line_and_quadratic(l,e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 402,
   "metadata": {},
   "outputs": [],
   "source": [
    "q=QuadraticFunction(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 403,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 16 \\cdot \\left(2 k^{2} - 1\\right)$"
      ],
      "text/plain": [
       "16*(2*k**2 - 1)"
      ]
     },
     "execution_count": 403,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(q.delta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 404,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x^{2}}{4} + \\frac{y^{2}}{2} - 1$"
      ],
      "text/plain": [
       "x**2/4 + y**2/2 - 1"
      ]
     },
     "execution_count": 404,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e.equation()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 406,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,B=Intersection(l,e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 407,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{- \\frac{2 k \\sqrt{2 k^{2} - 1}}{2 k^{2} + 1} - 2 + \\frac{2}{2 k^{2} + 1}}{k}, - \\frac{2 k \\sqrt{2 k^{2} - 1}}{2 k^{2} + 1} + \\frac{2}{2 k^{2} + 1}\\right)$"
      ],
      "text/plain": [
       "Point2D((-2*k*sqrt(2*k**2 - 1)/(2*k**2 + 1) - 2 + 2/(2*k**2 + 1))/k, -2*k*sqrt(2*k**2 - 1)/(2*k**2 + 1) + 2/(2*k**2 + 1))"
      ]
     },
     "execution_count": 407,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 408,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(\\frac{\\frac{2 k \\sqrt{2 k^{2} - 1}}{2 k^{2} + 1} - 2 + \\frac{2}{2 k^{2} + 1}}{k}, \\frac{2 k \\sqrt{2 k^{2} - 1}}{2 k^{2} + 1} + \\frac{2}{2 k^{2} + 1}\\right)$"
      ],
      "text/plain": [
       "Point2D((2*k*sqrt(2*k**2 - 1)/(2*k**2 + 1) - 2 + 2/(2*k**2 + 1))/k, 2*k*sqrt(2*k**2 - 1)/(2*k**2 + 1) + 2/(2*k**2 + 1))"
      ]
     },
     "execution_count": 408,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 410,
   "metadata": {},
   "outputs": [],
   "source": [
    "A,D=Intersection(Line(A,C),e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 411,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 411,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Line(B,D).slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 18. (1) ... (2) 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 412,
   "metadata": {},
   "outputs": [],
   "source": [
    "expr=x+k*ln(1+x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 413,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle k \\log{\\left(x + 1 \\right)} + x$"
      ],
      "text/plain": [
       "k*log(x + 1) + x"
      ]
     },
     "execution_count": 413,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "expr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 415,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1 - \\frac{1}{x + 1}$"
      ],
      "text/plain": [
       "1 - 1/(x + 1)"
      ]
     },
     "execution_count": 415,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diff(expr.subs(k,-1),x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 416,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x}{x + 1}$"
      ],
      "text/plain": [
       "x/(x + 1)"
      ]
     },
     "execution_count": 416,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 433,
   "metadata": {},
   "outputs": [],
   "source": [
    "l=function_tangent(expr,x,t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 423,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{k \\left(- t \\log{\\left(t + 1 \\right)} + t - \\log{\\left(t + 1 \\right)}\\right)}{t + 1}$"
      ],
      "text/plain": [
       "k*(-t*log(t + 1) + t - log(t + 1))/(t + 1)"
      ]
     },
     "execution_count": 423,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.equation(x,y).subs({x:0,y:0})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 424,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - t \\log{\\left(t + 1 \\right)} + t - \\log{\\left(t + 1 \\right)}$"
      ],
      "text/plain": [
       "-t*log(t + 1) + t - log(t + 1)"
      ]
     },
     "execution_count": 424,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fraction(_)[0]/k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 425,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\log{\\left(t + 1 \\right)}$"
      ],
      "text/plain": [
       "-log(t + 1)"
      ]
     },
     "execution_count": 425,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(_,t))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 428,
   "metadata": {},
   "outputs": [],
   "source": [
    "A=Point(x,expr.subs(k,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 429,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(x, x + \\log{\\left(x + 1 \\right)}\\right)$"
      ],
      "text/plain": [
       "Point2D(x, x + log(x + 1))"
      ]
     },
     "execution_count": 429,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 430,
   "metadata": {},
   "outputs": [],
   "source": [
    "C=Point(0,expr.subs(k,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 431,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, x + \\log{\\left(x + 1 \\right)}\\right)$"
      ],
      "text/plain": [
       "Point2D(0, x + log(x + 1))"
      ]
     },
     "execution_count": 431,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 432,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, 0\\right)$"
      ],
      "text/plain": [
       "Point2D(0, 0)"
      ]
     },
     "execution_count": 432,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "O"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 437,
   "metadata": {},
   "outputs": [],
   "source": [
    "l1=function_tangent(expr.subs(k,1),x,x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 438,
   "metadata": {},
   "outputs": [],
   "source": [
    "B,=Intersection(Line(x),l1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 439,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\operatorname{Point2D}\\left(0, \\frac{x \\log{\\left(x + 1 \\right)} - x + \\log{\\left(x + 1 \\right)}}{x + 1}\\right)$"
      ],
      "text/plain": [
       "Point2D(0, (x*log(x + 1) - x + log(x + 1))/(x + 1))"
      ]
     },
     "execution_count": 439,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 440,
   "metadata": {},
   "outputs": [],
   "source": [
    "aco=Triangle(A,C,O)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 441,
   "metadata": {},
   "outputs": [],
   "source": [
    "abo=Triangle(A,B,O)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 442,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle x \\left(x + \\log{\\left(x + 1 \\right)}\\right) - \\frac{15 x \\left(x \\log{\\left(x + 1 \\right)} - x + \\log{\\left(x + 1 \\right)}\\right)}{2 \\left(x + 1\\right)}$"
      ],
      "text/plain": [
       "x*(x + log(x + 1)) - 15*x*(x*log(x + 1) - x + log(x + 1))/(2*(x + 1))"
      ]
     },
     "execution_count": 442,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2*aco.area-15*abo.area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 443,
   "metadata": {},
   "outputs": [],
   "source": [
    "check=simplify(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 453,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{x \\left(2 x^{2} - 13 x \\log{\\left(x + 1 \\right)} + 17 x - 13 \\log{\\left(x + 1 \\right)}\\right)}{2 \\left(x + 1\\right)}$"
      ],
      "text/plain": [
       "x*(2*x**2 - 13*x*log(x + 1) + 17*x - 13*log(x + 1))/(2*(x + 1))"
      ]
     },
     "execution_count": 453,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 445,
   "metadata": {},
   "outputs": [],
   "source": [
    "checks=fraction(check)[0]/x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 455,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{2 x^{2} - 13 x \\log{\\left(x + 1 \\right)} + 17 x - 13 \\log{\\left(x + 1 \\right)}}{x + 1}$"
      ],
      "text/plain": [
       "(2*x**2 - 13*x*log(x + 1) + 17*x - 13*log(x + 1))/(x + 1)"
      ]
     },
     "execution_count": 455,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simplify(checks/(x+1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 447,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 4 x - 13 \\log{\\left(x + 1 \\right)} + 4$"
      ],
      "text/plain": [
       "4*x - 13*log(x + 1) + 4"
      ]
     },
     "execution_count": 447,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(checks))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 449,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAHWCAYAAADzS2TwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJqUlEQVR4nO3dd3hUVeLG8XfSJgkpECC9EHrvRYo0BQFFUcGC62JZ11UsyM++RdwCq66uu+vq2ruCugioqIBKbyESegskEEJCQgiZ1Ekyc39/BLIEQVqSO+X7eZ55dnMzk7wwSF7Ouecci2EYhgAAAOB2fMwOAAAAgAtDkQMAAHBTFDkAAAA3RZEDAABwUxQ5AAAAN0WRAwAAcFMUOQAAADdFkQMAAHBTXlnkDMOQzWYTeyEDAAB35pVFrri4WOHh4SouLjY7CgAAwAXzyiIHAADgCShyAAAAbooiBwAA4KYocgAAAG6KIgcAAOCmKHIAAABuiiIHAADgpihyAAAAbooiBwAA4KYocgAAAG6KIgcAAOCmKHIAAABuiiIHAADgpihyAAAAbooiBwAA4KYocgAAAG6KIgcAAOCmKHIAAABuiiIHAABwFkXlVZry1np9tO6AnE7D7Di1KHIAAABnsWT7YS3bna93VmfIx8didpxaFDkAAICz+HprriRpbNcYk5PURZEDAAD4GcUVVVq+J1+SNK4bRQ4AAMBtfL8zT5XVTrVu0UTto0LMjlMHRQ4AAOBnfL3l+LRqt2hZLK5zf5xEkQMAADijsspqLd2dJ8n17o+TKHIAAABntHRXviqqnEqMCFaX2DCz4/wERQ4AAOAMFm7JkeSa06oSRQ4AAOC0Kqoc+n6n606rShQ5AACA01q2O19llQ7FhgeqR3y42XFOiyIHAABwGt+c2AS4W4xLTqtKFDkAAICfsFc7tGT7YUnSuG7RJqc5M4ocAADAKValH1GxvVpRYVb1SmhmdpwzosgBAACcYuHxTYDHdImWj49rTqtKFDkAAIA6qhxOLT4+rTrWxc5WPRVFDgAA4CRr9haoqLxKLUIC1K9VhNlxfhZFDgAA4CRfb63ZBPiKLtHydeFpVYkiBwAAUKva4dS3206sVnXtaVWJIgcAAFBrfcZRHS2tVLNgfw1Idu1pVYkiBwAAUOvr45sAj+4cLT9f169Jrp8QAACgETichr7ZduI0B9fdBPhkFDkAAABJqfsLlV9sV1ignwa1aWF2nHNCkQMAAJC0cEvNatVRnaMV4OceFcmlUs6aNUv9+vVTaGioIiMjNWHCBO3atavOc2677TZZLJY6j0suucSkxAAAwBM4nYa+OX5/3Niu7jGtKrlYkVu2bJmmTp2qtWvXavHixaqurtbo0aNVWlpa53ljxoxRTk5O7WPhwoUmJQYAAJ5gY1ahcm0VCrH6aUg795hWlSQ/swOc7Jtvvqnz8dtvv63IyEilpqZq6NChtdetVquio92nLQMAANf25eYT06pRCvT3NTnNuXOpEblTFRUVSZIiIuru47J06VJFRkaqffv2uuuuu5SXl/ezX8dut8tms9V5AAAASDXTqifuj7uqu+tvAnwyly1yhmFo+vTpGjJkiLp27Vp7fezYsfrwww/1/fff6/nnn1dKSopGjhwpu91+xq81a9YshYeH1z4SEhIa45cAAADcQErmUR222RUa6F7TqpJkMQzDMDvE6UydOlVfffWVVq5cqfj4+DM+LycnR0lJSZo9e7auu+660z7HbrfXKXo2m00JCQkqKipSWFhYvWcHAADu4/fztur9tfs1sU+8/japh9lxzotL3SN3wv33368FCxZo+fLlP1viJCkmJkZJSUnas2fPGZ9jtVpltVrrOyYAAHBz1Q6nvt7qntOqkosVOcMwdP/99+vzzz/X0qVLlZycfNbXFBQUKCsrSzEx7vebDwAAzLU+46iOlFSqabC/Brd1r2lVycXukZs6dao++OADffTRRwoNDVVubq5yc3NVXl4uSSopKdHDDz+sNWvWKDMzU0uXLtX48ePVokULXXvttSanBwAA7uaL46tVx3SJlr8bnK16KpcakXvllVckScOHD69z/e2339Ztt90mX19fbdmyRe+9956OHTummJgYjRgxQnPmzFFoaKgJiQEAgLuqcjj1Te20aqzJaS6MSxW5s627CAoK0rfffttIaQAAgCdbvbdAhWVVat4kQJe0jjj7C1yQ+40hAgAA1IMvNx2SJI3tFi0/N5xWlShyAADAC1VWO/XttpqzVd11WlWiyAEAAC+0Mj1ftopqtQy1ql8r95xWlShyAADAC325qWaRw5XdYuTrYzE5zYWjyAEAAK9SUeXQou2HJbnnJsAno8gBAACvsnx3vkrs1YoJD1TvxGZmx7koFDkAAOBVvjy+CfC4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nn32WT333HP617/+ZXY0r1VaWqoePXropZdeOu3nn332Wb3wwgt66aWXlJKSoujoaI0aNeqcjhltCF41tTpgwAD17t1bzzzzTO3U6oABAzRhwgTNmjXL7Hg4jfz8fMV27K3xv3tDPx6uliSFWP10z/A2unNIMgsiTFRSUqLevXvr5Zdf1p///Gf17NlTL774otmxcNzjjz+uVatWmTrr8PWWHN33cU2Ju653nJ6b2EO+lLg6rrrqKkVFRenNN9+svXb99dcrODhY77//vonJINUcH/r5559rwoQJkmpG42JjYzVt2jQ99thjkmrOc4+KitIzzzyju+++u9Ezes2IXGVlpVJTUzV69Og610ePHq3Vq1eblApnU1RUpOqjB/XHUXGa8+tL1D0+XCX2aj337S5d9vwyzU/LltPpNf8WcSlTp07VlVdeqcsvv9zsKDiNBQsWqG/fvpo0aZIiIyPVq1cvvf766432/RduydH9J0pcL0rcmQwZMkTfffeddu/eLUnatGmTVq5cqXHjxpmcDKeTkZGh3NzcOl3CarVq2LBhpnUJtzyi60IcOXJEDodDUVFRda5HRUUpNzfXpFT4OYZhaPr06RoyZIi6du0qSZp372DN35StZ7/Zpexj5XpwdpreWpWp31/ZSX058qvRzJ49Wz/++KNSUlLMjoIz2Ldvn1555RVNnz5dTz75pNavX68HHnhAVqtVv/zlLxv0e3+4br9+N2+rDEOa0DNWz02ixJ3JY489pqKiInXs2FG+vr5yOBz6y1/+optvvtnsaDiNE33hdF1i//79ZkTyniJ3wqk7hxuGwW7iLuq+++7T5s2btXLlytprPj4WXdsrXmO6xOjNlfv0ytK92pR1TBP/s0bjukXr8TGdlNicEyIaUlZWlh588EEtWrRIgYGBZsfBGTidTvXt21czZ86UJPXq1Uvbtm3TK6+80mBFzjAMvfR9up5fXDO6NHlAov50TVdK3M+YM2eOPvjgA3300Ufq0qWL0tLSNG3aNMXGxmrKlClmx8MZuFKX8Jqp1RYtWsjX1/cno295eXk/adYw3/33368FCxbohx9+UHx8/E8+HxTgq/tGttMPjwzXzf0T5GORFm7J1eUvLNPMhTtUVF5lQmrvkJqaqry8PPXp00d+fn7y8/PTsmXL9M9//lN+fn5yOBxmR4SkmJgYde7cuc61Tp06NdjiLqfT0NNfbK8tcQ+MbKu/TKDEnc0jjzyixx9/XDfddJO6deumW2+9VQ899BD3bbuo6OhoSXKpLuE1RS4gIEB9+vTR4sWL61xfvHixBg0aZFIqnMowDN13332aO3euvv/+eyUnJ//s8yNDAzXruu5a+OClurRdC1U6nHpt+T4Nf+4Hvbs6U1UOlvDXt8suu0xbtmxRWlpa7aNv37665ZZblJaWJl9fFqC4gsGDB2vXrl11ru3evVtJSfV/MH1ltVPT5qTpndWZkqQZ4ztr+ugOzHacg7KyMvn41P1R7Ovry/YjLio5OVnR0dF1ukRlZaWWLVtmWpfwqqnV6dOn69Zbb1WXLl0k1azqOnDggH7zm9+YnAwnTJ06VR999JHmz5+v0NDQ2n/1hIeHKygo6Iyv6xgdpvfu6K+lu/P1l692KD2vRE8t2KZ312TqibGddHmnSH6o1JPQ0NDaexZPaNKkiZo3b/6T6zDPQw89pEGDBmnmzJm64YYbtH79er322mt67bXX6vX7lFVW6zcf/Kjlu/Pl52PR8zf00DU94+r1e3iy8ePH6y9/+YsSExPVpUsXbdy4US+88ILuuOMOs6N5rZKSEqWnp9d+nJGRobS0NEVERCgxMVHTpk3TzJkz1a5dO7Vr104zZ85UcHCwJk+ebE5gw8v8+9//NhISEgxJRo8ePYxly5aZHQknkXTax9tvv33OX6Oq2mG8vybT6P3HRUbSY18aSY99adz06hpjy8FjDRfcyw0bNsx48MEHzY6BU3zxxRdG165dDavVanTs2NF47bXX6vXrHy2xG9e8tNJIeuxLo+PvvjaW7sqr16/vDWw2m/Hggw8aiYmJRmBgoNG6dWvjt7/9rWG3282O5rV++OGH0/4cmjJlimEYhuF0Oo2nnnrKiI6ONqxWqzF06FBjy5YtpuX1qn3kTuCILu9QXFGll5fu1ZsrM1RZ7ZTFIl3XK16PXNFB0eHcpA9cjEPHyvXLt9YrPa9ETYP99fZt/dQrsZnZsQCvQ5GjyHm8g4Vleu7bXZqfdkiSFOjvo18PbaO7h7ZWE6tX3V0A1IstB4v0q/dSdNhmV0x4oN6/s7/aRoaaHQvwShQ5ipzXSMs6pj9/uV0b9hdKkiJDrfq/0e01sU8CK+uAc/TV5hz936dpqqhyql1kiN65o7/imp75/lUADYsiR5HzKoZh6JutufrrNzu1v6BMktQxOlSPj+2oYe1bsiACOAPDMPTP79L19yU124uM6NBS/7y5l0ID/U1OBng3ihxFzivZqx16f81+/fO7PbJV1JzhOrhtcz0xtpO6xoWbnA5wLRVVDj3y2WZ9sanm9oQ7hyTryXGdGMkGXABFjiLn1Y6VVerlpXv1zqpMVR7fc+6anrF6eHQHJURwQgSQZ6vQXe9t0KaDRfLzsejPE7rqpv6JZscCcBxFjiIHSVlHy/TC4t36fGO2JCnA10e/HJik+0a2VdPgAJPTAebYml2kX727Qbm2CjUN9tcrt/TRwDbNzY4F4CQUOYocTrI1u0izvt6hVekFkqSwQD9NHdFWUwa1UqA/JxbAe3yWelC/m7dFFVVOtWnZRG9O6adWLZqYHQvAKShyFDmcwjAMLd9zRLMW7tDO3GJJUlzTIE0f1V4TesVxXxA8WkWVQ0/N36Y5G7IkScPat9S/JvdSGIsaAJdEkaPI4QwcTkOfb8zW84t2KaeoQpLUISpUj1zRQZdx5Bc8UMaRUt3zQap25hbLYpEeury97hvRVj784wVwWRQ5ihzOoqLKobdXZerlpekqPr7CtXdiUz06pqMuac39QvAMC7fk6NHPNqvEXq0WIQH6x029NLhtC7NjATgLH7MDAK4u0N9X9wxvo5WPjtQ9w9so0N9HPx44ppteW6tfvrVeW7OLzI6Ii/Txxx8rMDBQ2dnZtdd+9atfqXv37ioq8uz3t7LaqRkLtuneD39Uib1a/VtF6KsHLqXEAW6CETlG5HCe8mwV+tf36fp4/QFVO2v+87myW4ymj26vNi1DTE6HC2EYhnr27KlLL71UL730kp5++mm98cYbWrt2reLi4syO12D2F5TqwdlpSss6Jkm6e1hrPTK6g/x8+Tc+4C4ochQ5XKADBWX6+5LdmpeWLcOQfH0smtAzTg9c1lZJzVnd526+/PJLTZw4UX/4wx/0t7/9TStWrFCXLl3MjtUgnE5DH67br5kLd6q8yqGwQD89f0NPjeocZXY0AOeJIkeRw0XamWvT377drSU7DkuqKXTX947T/SPbsamwm+ndu7e2bdumRYsWadiwYWbHaRDZx8r12GebtTL9iCRpQHKE/japB39WATdFkaPIoZ6kZR3T3xfv1rLd+ZIkPx+LJvWN19QRbRXfjB+Sru7bb7/Vtddeq8rKSm3dulUdO3Y0O1K9MgxDn6Ye1J++2K5ie7UC/X302JiOmjKwFatSATdGkaPIoZ6l7i/Ui0t2a8WemhEPf1+LJvVN0NQRbRXXNMjkdDidH3/8UcOHD9e///1vzZ49W8HBwfr000/NjlVv8mwVemLuFn23M0+S1CuxqZ6f1EOtuacTcHsUOYocGsiGzKP6+5LdtadE+PtadH3veP1mWBt2yHchmZmZGjhwoO6//349+eSTSk1NVb9+/ZSSkqI+ffqYHe+ifbHpkH4/f6uOlVUpwNdH00e3112XtmZja8BDUOQocmhg6/YV6O9LdmvtvqOSJB+LdFX3WE0d0VYdokNNTufdjh49qsGDB2vo0KF69dVXa69fc801stvt+uabb0xMd3GOllbq9/O26qstOZKkLrFheuGGnvyZAzwMRY4ih0ayIfOoXvohXUt35ddeG9U5SveNaKseCU3NCwaP4nAa+nj9Af1t0S4dK6uSn49F941sq6kj2sqfbUUAj0ORo8ihkW3NLtLLS9P19dZcnfiv79J2LfSbYW00qE1zjv7CBUvdf1R/mL9N2w7ZJEkdo0P13MQe6hYfbnIyAA2FIkeRg0nS84r1ytJ9mpeWLcfxjYU7xYTpV0OSNb5HrAL8GD3BuckrrtBfv96puT/WnEwRGuin/xvVXr+4JInNfQEPR5GjyMFkWUfL9PqKffp0w0GVVzkkSZGhVk0Z1Eq3DEhU0+AAkxPCVVU5nHp3daZeXLJHJfaac4Bv7JugR8Z0UIsQq8npADQGihxFDi7iWFmlPlp/QO+uztRhm12SFOTvq0l943XH4GRWuqKWYRhaseeI/vjldqXnlUiSesSH6+lruqon91sCXoUiR5GDi6msdurLzYf0+ooM7cipudfJYpFGdYrSHUOSNSA5gvvovFhK5lH97dtdWpdRswo6okmAHhvTQZP6JLCxL+CFKHIUObgowzC0Zm+B3liZoe+Pb+QqSe0iQ3TrwCRd2ytOoYH+JiZEY9qUdUzPL96t5cdPDgnw9dEtlyRq2mXtFR7MnwPAW1HkKHJwA+l5JXprVYbmbcxWWWXNfXTBAb6a0CtOvxiQpM6x/Dn2VDtybHph8W4t3l5zlm/N0W8Jun9kW8VyUgjg9ShyFDm4EVtFlT7/MVvvr91fe2+UJPVJaqYb+sbryu6xCrH6mZgQ9WVXbrH+9f0efbm5ZkNfH4s0oVecpl3WXonNObsXQA2KHEUObsgwDK3dd1QfrNuvb7fmqvr49iVB/r4a2y1ak/okaEByBPdMuRnDMLR8zxG9sWJf7Vm9knRl9xg9dHk7tY3kVAYAdVHkKHJwc3m2Cv33x2x9mpqlffmltdcTIoI0sXeCru8Tp/hmjOC4sooqh+anZeuNFRnac3yk1ccijekarftGtGPqHMAZUeQocvAQhmHoxwOF+iz1oL7YlFO7r5jFIvVvFaHxPWI1tmu0mrO/mMs4UmLXB2v36/01+1VQWilJahLgqxv7Jer2wa2UEEEBB/DzKHIUOXig8kqHvtmWo083HNTqvQW11319LBrUprmu6h6jK7pEs9mwCRxOQyv25OuTDVlavP2wqhw1fwXHhgfq9sHJurF/gsJYjQzgHFHkKHLwcAcLy/TV5hx9uTlHW7KLaq/7+Vh0absWGts1RiM6RqplKCN1DSnraJk+3ZClz1IP6lBRRe31HglN9ashyRrbNZrjtACcN4ocRQ5eJPNIqb7akqMvNh3Sztzi2usWi9Qjvqku7xSpkR2j1CkmlE2H60FecYUWbs7RF5tzlLq/sPZ6eJC/ru0Vp0l949UllgPtAVw4ihxFDl4qPa9EX23O0ZIdh+uM1ElSXNMgjewYqZEdIzWgdYSCA9jS5FxlHyvXdzsO65utuVq7r0DHFxTLYpEGt2mhG/olaHTnKAX6+5obFIBHoMhR5AAdtlXoux15+n7nYa1MP6KKKmft5/x9Leqd2ExD2rbQoLbN1S2uqQL8mAI8weE0tDW7SN/tzNOS7Ye1/fixaif0Smyq8d1jdWX3GEWFBZqUEoCnoshR5IA6yisdWr33iJbsyNPy3fnKPlZe5/OB/j7qldBM/ZMj1D85Qj0SmnrVJsSGYSjjSKlW7y3QqvQjWr23QEXlVbWf97HUbNB8eacojesWw8pTAA2KIkeRA87IMAztLyjTyvQjWpV+RGv3FaiwrKrOcyyWmvNfeyY0VY+EpuoSG64OUaEKCvCMqcPySoe259i08UChNmQWasP+ozpSUlnnOSFWPw1p20KXd47SiA4t2eIFQKNxuyLXqlUr7d+/v861xx57TH/961/P+WtQ5IALYxiG0vNKtD7zqNZnHNWGzMKfjNhJNaNSrVuGqHNMmDpEh6ptZIjaRoYooVmwy07LGoah/BK7dueWaNfhYm0/ZNPW7CLtySuuvc/thABfH/VMaKoh7VpocNsW6hEfzopTAKZwyyJ355136q677qq9FhISopCQkHP+GhQ5oP7kFVdoU1aR0rIKtflgkXbk2H4yYnWCr49F8c2ClBgRrISIYMU3C1JseJCiwwMVFRaoyFCrmjTQNK1hGLKVV+twcYVyiyp06Fi5DhaW68DRMu0/WqZ9+SUqrqg+7WtbhlrVPS5cfVtFqF+rZuoaF85iBQAuwS1vbAkNDVV0dLTZMQBIigwN1KjOgRrVOar2Wl5xhbYfsml7jk17DpdoT16x9uaVqrzKof0FZdpfUHbGrxfo76PmTawKC/JXeJCfQqz+CrH6KijAV4H+vgrw85G/j0+dc2SdTkNVDqcqHU5VVDlVXlmt0kqHisqrZCuvUmFZpQpLq1TpcJ7x+0o1I4mtmjdR+6hQtY8OVfe4cHWLD2eRAgCX5ZYjcna7XZWVlUpISNCkSZP0yCOPKCDg3HeoZ0QOaHyGYeiwza6MI6XKKizTwaNlOlhYrpyiCuUUlSuv2K6ySkeD5wgP8ldUmFWxTYMU2zRISRHBSmoerNYtQ5TUPFhWP0baALgPtxuRe/DBB9W7d281a9ZM69ev1xNPPKGMjAy98cYbZ3yN3W6X3W6v/dhms53xuQAahsViUXR4oKLDAzVQzU/7nFJ7tY6WVqqgtFJF5VU6VlapUrtDpfZqlVc5VFHlkL3aKYfTkOOkG9d8LFKAn4/8fH0U5O+r4ABfBQf4KTzIX6GBfmoWHKCIkAA1bxLAlCgAj+ISI3IzZszQ008//bPPSUlJUd++fX9y/b///a8mTpyoI0eOqHnz0/9wONPXZ0QOAAC4M5cockeOHNGRI0d+9jmtWrVSYOBP71PJzs5WfHy81q5dqwEDBpz2tacbkUtISKDIAQAAt+YSU6stWrRQixYtLui1GzdulCTFxMSc8TlWq1VWK/s6AQAAz+ISRe5crVmzRmvXrtWIESMUHh6ulJQUPfTQQ7r66quVmJhodjwAAIBG5VZFzmq1as6cOXr66adlt9uVlJSku+66S48++qjZ0QAAABqdS9wj19jYfgQAAHgCzpQBAABwUxQ5AAAAN0WRAwAAcFMUOQAAADdFkQMAAHBTFDkAAAA3RZEDAABwUxQ5AAAAN0WRAwAAcFMUOQAAADdFkQMAAHBTFDkAAAA3RZEDAABwUxQ5AAAAN2UxDMMwO0RjMwxDxcXFCg0NlcViMTsOAADABfHKIgcAAOAJmFoFAABwUxQ5AAAAN0WRAwAAcFMUOQAAADdFkQMAAHBTFDkAAAA3RZEDAABwU/8PeCQTROj6ZlUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x138f75a90>"
      ]
     },
     "execution_count": 449,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(checks,(x,0,10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 457,
   "metadata": {},
   "outputs": [],
   "source": [
    "end=13*ln(x+1)-2*x-15*x/(x+1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 458,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 2 x - \\frac{15 x}{x + 1} + 13 \\log{\\left(x + 1 \\right)}$"
      ],
      "text/plain": [
       "-2*x - 15*x/(x + 1) + 13*log(x + 1)"
      ]
     },
     "execution_count": 458,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 463,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -2 + \\frac{13}{x + 1} - \\frac{15}{\\left(x + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "-2 + 13/(x + 1) - 15/(x + 1)**2"
      ]
     },
     "execution_count": 463,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "apart(diff(end,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 464,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{- 2 x^{2} + 9 x - 4}{x^{2} + 2 x + 1}$"
      ],
      "text/plain": [
       "(-2*x**2 + 9*x - 4)/(x**2 + 2*x + 1)"
      ]
     },
     "execution_count": 464,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cancel(diff(end,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 460,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - \\frac{\\left(x - 4\\right) \\left(2 x - 1\\right)}{\\left(x + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "-(x - 4)*(2*x - 1)/(x + 1)**2"
      ]
     },
     "execution_count": 460,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor(diff(end,x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 465,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<sympy.plotting.plot.Plot at 0x1392b5f50>"
      ]
     },
     "execution_count": 465,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot(end,(x,0,7))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 466,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -20 + 13 \\log{\\left(5 \\right)}$"
      ],
      "text/plain": [
       "-20 + 13*log(5)"
      ]
     },
     "execution_count": 466,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "end.subs(x,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 468,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle -20.5546142767134$"
      ],
      "text/plain": [
       "-20.5546142767134"
      ]
     },
     "execution_count": 468,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "end.subs(x,24)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 469,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-20.54"
      ]
     },
     "execution_count": 469,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "26*1.61-48-72/5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
